我有一個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
我該怎麼辦呢?
我有一個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
我該怎麼辦呢?
在主存儲過程(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
將失敗。
SELECT
* -- change this
FROM
ListOfIds T
CROSS APPLY
dbo.UDFT1 ([email protected]) T1
這是假設
ListOfIds
這裏)
你可以改變SP1存儲過程成爲用戶定義的函數? – gbn 2012-02-08 16:08:21
它是用戶定義的。我的不好不澄清 – 2012-02-08 17:23:15
函數或過程對不起?他們是SQL Server中的兩種不同的東西?如果功能,請看我的回答 – gbn 2012-02-08 17:41:45