2012-02-08 39 views
1

我有一個T-SQL用戶定義-SP(稱之爲sp1)它獲取用戶ID作爲PARAM並返回重複用戶-SP

我想創建一個新的用戶定義-SP (稱之爲sp2),獲取userIds列表。

sp2爲每個userId和union all執行sp1輸出到一個大輸出。

每一組的用戶id =輸出一個將是連續的大表

即大表可以是這樣的:

a result1,1 
a result1,2 
a result1,3 
b result2,1 
b result2,1 

我該怎麼辦呢?

+0

你可以改變SP1存儲過程成爲用戶定義的函數? – gbn 2012-02-08 16:08:21

+0

它是用戶定義的。我的不好不澄清 – 2012-02-08 17:23:15

+0

函數或過程對不起?他們是SQL Server中的兩種不同的東西?如果功能,請看我的回答 – gbn 2012-02-08 17:41:45

回答

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 [email protected]) 
    --Proc must return a data set using SELECT with the proper columns in the proper order 

    SET @[email protected]+1 
END 

SELECT * FROM @return_tbl 

唯一要注意的是,如果SP2嵌套在另一個存儲過程的內部INSERT EXEC將失敗。

0
SELECT 
    * -- change this 
FROM 
    ListOfIds T 
    CROSS APPLY 
    dbo.UDFT1 ([email protected]) T1 

這是假設

  • ID列表已經在一個表(ListOfIds這裏)
  • T1實際上是一個UDF,不