我有一个t-sql用户自定义的sp(称之为sp1
),它将userId作为param并返回
我想创建一个新的user-defined-sp(称之为sp2
),它获取userIds列表。
sp2为每个userId执行sp1,并将所有输出联合为一个大输出。
userId = a的每组输出将在大表中连续
即。大桌子看起来像:
a result1,1
a result1,2
a result1,3
b result2,1
b result2,1
我该怎么做?
答案 0 :(得分:0)
在主存储过程(sp2)中,您可以创建一个表变量,并用数据填充它,然后从该表变量中选择所有变量。像这样:
DECLARE @loop_tbl TABLE (ID int identity(1,1), UserID int)
DECLARE @return_tbl TABLE (column_a varchar(1), column_result varchar(20), column_int int)
DECLARE @min int, @max int
INSERT INTO @loop_tbl(UserID) SELECT UserID FROM Users
SELECT @min=MIN(ID), @max=MAX(ID) FROM @loop_tbl
WHILE @min <= @max
BEGIN
INSERT INTO @return_tbl (column_a, column_result, column_int)
EXEC sp1 @userid=(SELECT UserID FROM @loop_tbl WHERE ID=@min)
--Proc must return a data set using SELECT with the proper columns in the proper order
SET @min=@min+1
END
SELECT * FROM @return_tbl
唯一需要注意的是,如果sp2嵌套在另一个存储过程中,INSERT EXEC
将失败。
答案 1 :(得分:0)
SELECT
* -- change this
FROM
ListOfIds T
CROSS APPLY
dbo.UDFT1 (T.@userid) T1
这假定
ListOfIds
此处)