2012-01-05 52 views
1

我有一個存儲過程生成產品序列號列表。你能從查詢的輸出中設置存儲過程參數嗎?

exec GenerateSequenceList @Min = 10, @Max = 25, @Prefix = N'Toaster' 

我現在必須生成報告序列列表。 有沒有一種方法可以從查詢的輸出中提供此存儲過程? 例如,爲所有烤麪包機,勺子和平底鍋生成一個序列表。

select min, max, prefix from products where prefix in ('Toaster', 'Ladle', 'Pan') 

回答

4

在循環中,是的。每行一次,你就會有多個結果(每個循環一個存儲過程輸出反覆迭代

的最好方法是使用APPLY和UDF,如果你可以重新寫入使用UDF的

select P.prefix , T.* 
from 
    products P 
    CROSS APPLY -- or OUTER APPLY maybe 
    dbo.SomeUDF (P.min, P.max, P.prefix) T 
where 
    P.prefix in ('Toaster', 'Ladle', 'Pan') 

UDF可以在存儲過程中被調用以維護「API」

+0

+1:如果邏輯是隻讀的,將它封裝在一個表值用戶定義的函數中給你提供了更多的靈活性。 – MatBailie 2012-01-05 11:36:23