如果我想使用select语句的结果集返回的值来执行存储过程。因此,SP应该执行的次数等于select语句中的结果集数。
除了使用光标执行上述操作之外还有其他方法吗?
更新
任何人都可以至少使用While循环提供示例代码吗?
答案 0 :(得分:1)
在T-SQL中,只有两种迭代方式。循环或游标。如果您不想使用游标,则必须使用while循环,如James Wiseman所说。
实现这种情况的另一种方法是SQL CLR。如果您使用的是SQL CLR,则可以使用所有C#(或VB.Net)迭代来实现目标。
答案 1 :(得分:1)
您必须将proc转换为多语句表值UDF ..
create function dbo.udf_Whatever_That_Proc_Did(
@SameOldParam as int
)
AS Begin
Declare --same variables here
/*same code in your proc that does not
- invoke nondeterministic built-in function
- change state of database
- return messages to caller
*/
Return
End
利用功能:
Select *
from dbo.udf_Whatever_That_Proc_Did(9999)
答案 2 :(得分:1)
我会将proc转换为使用表变量并使用它传递数据集。这样做的好处在于,一旦完成了更改,就可以对单行插入或多行使用相同的proc,并且可以在不逐行的集合中执行。 你需要SQL Server 2008。
答案 3 :(得分:0)
游标的替代方法是while循环,有时建议将其替换为SQL游标。
您想避免使用光标的问题,还是您要避免完全避免迭代?
答案 4 :(得分:0)
也许这可以帮助你,创建一个UDF,然后从该UDF中调用存储的proc。由于您可以在select查询中调用UDF,因此它应该执行存储过程的次数与select select中的结果一样多。