我有一个包含两列(除其他外)的表:id 和 created_in_variant 以及一个基于 id 计算 created_in_variant 值的存储过程。我想做这样的事情:
UPDATE [dbo].[alerts]
SET [created_in_variant] = find_root [id]
有什么好的方法吗?
我有一个包含两列(除其他外)的表:id 和 created_in_variant 以及一个基于 id 计算 created_in_variant 值的存储过程。我想做这样的事情:
UPDATE [dbo].[alerts]
SET [created_in_variant] = find_root [id]
有什么好的方法吗?
将您的 proc 更改为 UDF,您基本上完全按照您的要求调用它
UPDATE [dbo].[alerts]
SET [created_in_variant] = dbo.find_root([id])
如果您被迫使用存储过程来实现您所要求的,您可以简单地将找到的根值保存在一个变量中并传递它。除非您像其他人提到的那样使用 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
将存储过程重写为标量值函数。然后,您可以将其用于更新。
您可以将 created_in_variant 设为计算域吗?
您可以使用 UDF 而不是存储过程。
我不这么认为。如果您将存储过程转换为可以工作的缩放函数。
如果您想使用存储过程,则必须为每个 id(在游标中)调用存储过程并在 OUTPUT 变量中返回值,然后使用输出变量对每个 id 进行更新。但是,使用 UDF 会好得多。
您可以将存储过程重新编程为用户定义的函数并使用它。
您只是缺少dbo。,DJ回答应该已经很好了。我今天有同样的问题。