使用存储过程会导致更新语句

时间:2009-04-09 15:24:14

标签: sql sql-server tsql sql-update

我有一个包含两列(以及其他列)的表:id和created_in_variant以及一个基于id计算created_in_variant值的存储过程。 我想做这样的事情:

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

有一个很好的方法吗?

9 个答案:

答案 0 :(得分:3)

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

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

编辑2 :以下是来自15 Seconds

的更多信息

答案 1 :(得分:1)

将你的proc更改为UDF,你基本上就像你所说的那样调用它

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

答案 2 :(得分:1)

如果您强制使用存储过程来实现您所要求的内容,您只需将找到的根值保存在变量中并将其传递。 除非您像其他人提到的那样使用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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您可以将created_in_variant设为计算字段吗?

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我不这么认为。如果您将存储过程转换为可以工作的缩放器功能。

如果要使用存储过程,则必须为每个id(在游标中)调用存储过程并返回OUTPUT变量中的值,然后对每个id与输出变量进行更新。但是,使用UDF要好得多。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

你只是缺少dbo。,DJ回答shuold已经很好了。我今天遇到了同样的问题。