重复用t-sql编写的user-sp

时间:2012-02-08 15:59:58

标签: sql tsql

我有一个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

我该怎么做?

2 个答案:

答案 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

这假定

  • ID列表已在表格中(ListOfIds此处)
  • T1实际上是UDF,而不是存储过程