How to execute stored procedures and use their returned table within another procedure?
本问题已经有最佳答案,请猛点这里访问。
在MS Access中,您可以使用两个表和选择查询执行以下操作
1 | FROM Product INNER JOIN outputQry ON Product.ProductId = outputQry.ProductId |
假设产品是一个表,而输出是一个查询,那么在T-SQL中如何做到这一点呢?
我编写了一个返回表的函数,如何在另一个函数/过程中执行它,以便(例如)使用一些表对结果进行内部联接?
我的功能是这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ALTER FUNCTION [dbo].[PreconfiguredConfigs_GetNoOfOutputs]() RETURNS @outputTable TABLE ( ProductId int, NumberOfOutputs int ) AS BEGIN DECLARE @table TABLE ( ProductId int, NumberOfOutputs int ) INSERT INTO @table SELECT Outputs.ProductId, Count(Outputs.ProductId) AS NumberOfOutputs FROM [dbo.PreconfiguredConfigs].[Outputs] GROUP BY Outputs.ProductId; INSERT INTO @outputTable SELECT ProductId, NumberOfOutputs FROM @table RETURN END |
号
编辑:另外一个要求是我可以"链接"函数,所以上面写的一个结果可以用于另一个函数(内部将其与其他列连接),并且该函数结果也可以用于另一个函数(也连接这些函数)。
甚至可以这样做,还是我必须彻底改变我的设计?这些需求来自于在Access中设计数据库的方式。
此海报建议将select查询放入table-value函数中,这是我做的,但我不理解此行:
1 | SELECT * INTO CustList FROM CustomersbyRegion(1) |
什么是客户名单?它是否是数据库中的一个表,每当调用函数时都会被覆盖?我想这是一个解决方案,因为这样我就可以随心所欲地进行内部连接,并避免在使用变量和临时表时看到的所有
您有几个选择:
1)将存储过程执行到临时表中,然后与临时表联接。
1 2 3 4 5 6 7 8 | CREATE TABLE #tempTable ( COL1 INT, COL2 INT ) INSERT INTO #tempTable Exec myStoredProcedure |
2)创建一个用户定义的函数,该函数返回一个表并在此基础上联接。
1 2 3 4 5 6 7 8 9 10 11 | CREATE FUNCTION output ( ) RETURNS TABLE AS RETURN SELECT Outputs.ProductId, Count(Outputs.ProductId) AS NumberOfOutputs FROM [dbo.PreconfiguredConfigs].[Outputs] GROUP BY Outputs.ProductId GO |
号
我相信,当您运行一个查询时,access所做的就是创建一个"视图",这就是为什么您可以加入它。在SQL Server视图中,操作方式相同(对基表的任何更改在调用基表时都表示在视图中)。
1 2 3 4 5 | create view output_vw as SELECT Outputs.ProductId, Count(Outputs.ProductId) AS NumberOfOutputs FROM [dbo.PreconfiguredConfigs].[Outputs] GROUP BY Outputs.ProductId |
然后您可以加入:
1 | FROM Product INNER JOIN output_vw ON Product.ProductId = output_vw.ProductId |
。