如何从表中提供值?

时间:2013-01-03 17:12:35

标签: sql sql-server sql-server-2008

我需要将表中的值插入到sproc中。例如:

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

这可以使用游标来完成,但有没有办法通过设置操作来完成?

2 个答案:

答案 0 :(得分:1)

我认为您选择的方法将基于您可用的时间量,并且很难说这些方法中的哪一种最耗时,而不是更加熟悉逻辑。

有一些方法可以解决这个问题。

  1. 正如罗伯特哈维所暗示的,你应该看看也许 修改proc以接受表值参数(如果是的话) 使用SQL Server 2008向上)。如果没有,你可以创建一个标量 被“解码”到proc。中的表中的XML参数。
  2. 使用“参数数据”和ROW_NUMBER()填充#table 使用WHILE循环为#table中的每一行调用proc。
  3. 创建一个类型为FAST_FORWARD的CURSOR(我讨厌提供CURSOR建议) 并迭代地调用该过程。
  4. 动态SQL;使用EXEC或最好使用EXEC构建SQL命令字符串 sp_executesql的。
  5. 我的意见是,一等奖将是重新设计过程 接受参数过滤器。继续假设数据集 你希望创建参数是过滤的结果 查询:
  6. SELECT Moo, Meow
    FROM Woof
    WHERE Fu = @ParmX 
    AND Bar = @ParmY
    

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

答案 1 :(得分:1)

无法作为“设置操作”的一部分调用sproc。可能原因是sproc可能有任意的副作用,比如修改数据,发送额外的结果集(!)或关闭服务器。

游标是规范的方法。 (唉。)

当然,您可以修改sproc以获取TVP。不确定这是否适合您。