1

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

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

有什么好的方法吗?

4

9 回答 9

3

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

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

编辑 2:这里是15 Seconds的更多信息

于 2009-04-09T15:26:53.797 回答
2

将您的 proc 更改为 UDF,您基本上完全按照您的要求调用它

UPDATE [dbo].[alerts]
     SET [created_in_variant] = dbo.find_root([id])
于 2009-04-09T15:28:19.473 回答
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
于 2009-04-09T17:54:55.783 回答
0

将存储过程重写为标量值函数。然后,您可以将其用于更新。

于 2009-04-09T15:26:10.633 回答
0

您可以将 created_in_variant 设为计算域吗?

于 2009-04-09T15:26:35.780 回答
0

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

于 2009-04-09T15:26:58.010 回答
0

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

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

于 2009-04-09T15:27:07.230 回答
0

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

于 2009-04-09T15:27:24.403 回答
0

您只是缺少dbo。,DJ回答应该已经很好了。我今天有同样的问题。

于 2010-10-26T16:51:59.210 回答