我有一个包含两列(以及其他列)的表:id和created_in_variant以及一个基于id计算created_in_variant值的存储过程。 我想做这样的事情:
UPDATE [dbo].[alerts]
SET [created_in_variant] = find_root [id]
有一个很好的方法吗?
答案 0 :(得分:3)
答案 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已经很好了。我今天遇到了同样的问题。