我想做以下事情。基本上有一个存储过程调用另一个返回表的存储过程。这是怎么做到的?
ALTER PROC [GETSomeStuff]
AS
BEGIN
@table = exec CB_GetLedgerView @accountId, @fromDate, @toDate, @pageSize, @pageNumber, @filter, @status, @sortExpression, @sortOrder, @virtualCount OUTPUT
Select * from @table
--Do some other stuff here
END
答案 0 :(得分:22)
存储过程的目标必须是临时表或实际表,因此您可以
Insert into #table exec CB_GetLedgerView @accountId, @fromDate,
@toDate, @pageSize, @pageNumber,
@filter, @status, @sortExpression,
@sortOrder, @virtualCount OUTPUT
如果存储过程的输出结果集与目标表中的序号位置和行数不匹配,请指定列列表。
答案 1 :(得分:4)
临时表方法,至少如上所述,对我不起作用。您也可以轻松使用变量。
DECLARE @return_value INT
DECLARE @tblOutputTable TABLE(Col1 BIT NOT NULL, Col2 INT NOT NULL)
INSERT INTO @tblOutputTable EXEC @return_value = [dbo].[SomeSp] @Param1 = 15, @Param2 = 2
答案 2 :(得分:0)
也许你的例子并不具有代表性,但我要提出的第一个问题是,你真的需要以更复杂的代价制作这两个程序吗?像这样的分解有点像SQL的反模式。 (虽然有些人会不同意,但我已经在SO上看到了多数协议所讨论的内容。)