1

我需要将表中的值插入到存储过程中。例如:

exec mysproc @param1='col1', @param2='col2'

这可以使用游标来完成,但有什么方法可以通过设置操作来完成吗?

4

2 回答 2

1

我想您选择的方法将基于您可用的时间量,如果不更深入地了解逻辑,很难说这些方法中的哪一种最耗时。

有几种方法可以解决这个问题。

  1. 正如罗伯特哈维所暗示的那样,您也许应该考虑修改 proc 以接受表值参数(如果您使用的是 SQL Server 2008 及更高版本)。如果没有,您可以创建一个标量 XML 参数,将其“解码”到 proc 内的表中。
  2. 使用“参数数据”和 ROW_NUMBER() 填充 #table,并使用 WHILE 循环为 #table 中的每一行调用 proc。
  3. 创建一个 FAST_FORWARD 类型的 CURSOR(我讨厌给出 CURSOR 建议)并迭代调用该过程。
  4. 动态 SQL;使用 EXEC 或最好是 SP_EXECUTESQL 构建 SQL 命令字符串。
  5. 我的观点是,一等奖将是重新设计 proc 以接受参数过滤器。假设您希望从中创建参数的数据集是过滤查询的结果:
SELECT Moo, Meow
FROM Woof
WHERE Fu = @ParmX 
AND Bar = @ParmY

您的 proc 应该被调用,@ParmX, @ParmY然后内部的逻辑将以基于集合的方式进行。

于 2013-01-03T18:49:14.237 回答
1

不能将存储过程作为“设置操作”的一部分来调用。原因可能是存储过程可能具有任意副作用,例如修改数据、发送额外的结果集(!)或关闭服务器。

游标是解决此问题的规范方法。(唉。)

当然,您可以修改存储过程以采用 TVP。不确定这对你是否可行。

于 2013-01-03T19:02:07.813 回答