代码之家  ›  专栏  ›  技术社区  ›  sumek

使用存储过程会导致update语句

  •  1
  • sumek  · 技术社区  · 17 年前

    我有一个表,其中有两列:id和created_in_variant,以及一个存储过程,它根据id计算created_in_variant值。 我想这样做:

    UPDATE [dbo].[alerts]
         SET [created_in_variant] = find_root [id]
    

    有什么好办法吗?

    9 回复  |  直到 17 年前
        1
  •  3
  •   TheTXI    17 年前

    您可能希望使用 标量值函数 (也称为 用户定义函数 )而不是针对此类问题的存储过程。

    编辑 :以下是有关SVF的一些信息: Click

    编辑2 :以下是更多信息 15 Seconds

        2
  •  1
  •   DJ.    17 年前

    把你的进程改成一个UDF,你基本上是完全按照你的方式调用它的。

    UPDATE [dbo].[alerts]
         SET [created_in_variant] = dbo.find_root([id])
    
        3
  •  1
  •   dance2die    17 年前

    如果你是 强迫 要使用存储过程实现您所要求的,只需将找到的根值保存在变量中并传递给它。 有 更简单的方法,除非像其他人提到的那样使用UDF(用户定义函数)。

    这是使用存储过程时最简单的答案之一 因为 不能将存储过程直接传递给 UPDATE 语句。没有像C语言或Java语言那样的内插。

    declare @root int
    -- 1) Return the root through output parameter
    exec find_root @id, @root out
    -- or make the sproc to return the root value
    exec @root = find_root @id
    UPDATE [dbo].[alerts]
         SET [created_in_variant] = @root
    
        4
  •  0
  •   cjk    17 年前

    将存储过程重写为标量值函数。然后,您可以使用它进行更新。

        5
  •  0
  •   Shea    17 年前

    你能把创建的变量变成一个计算字段吗?

        6
  •  0
  •   Robin Day    17 年前

    您可以使用UDF而不是存储过程。

        7
  •  0
  •   Booji Boy    17 年前

    我不这么认为。如果将存储过程转换成可以工作的scaler函数。

    如果要使用存储过程,必须为每个ID(在光标中)调用存储过程,并返回输出变量中的值,然后对每个ID和输出变量进行更新。不过,最好使用UDF。

        8
  •  0
  •   edosoft    17 年前

    您可以将存储过程重新编程为用户定义的函数并使用它。

        9
  •  0
  •   UnDiUdin    15 年前

    你只是错过了dbo,DJ的回答Shuold已经很好了。我今天也有同样的问题。