2012-01-05 54 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