不使用游标,对所有结果集执行存储过程

时间:2010-09-21 10:29:38

标签: sql-server tsql

如果我想使用select语句的结果集返回的值来执行存储过程。因此,SP应该执行的次数等于select语句中的结果集数。

除了使用光标执行上述操作之外还有其他方法吗?

更新
任何人都可以至少使用While循环提供示例代码吗?

5 个答案:

答案 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中的结果一样多。