【发布时间】:2015-03-25 20:44:49
【问题描述】:
我必须使用我已经在前一行中更新的值来更新一行。写的很奇怪,所以我举个例子:
create table #temp (col1 int, col2 int)
insert into #temp values(1, 2)
insert into #temp values(2, 4)
insert into #temp values(3, 6)
update T set
col2 = case when col1 = 1 then 3 else (select col2 from #temp where col1 = 1) * col2 end
from #temp T
我得到的结果是:
col1 col2
----------- -----------
1 3
2 8
3 12
而我需要的是:
col1 col2
----------- -----------
1 3
2 12
3 18
在这种情况下有类似 NEW.value 的东西吗?
PS:我知道这个例子中的值是静态的,但在我的实际代码中它们不是。假设第一条记录中col2的值是未知的
【问题讨论】:
-
如果您对第一行 3 的值进行硬编码,那么为什么不将 col2*3 用于其他行?
-
那是因为这个例子看起来不像实际的过程。实际代码不会使用任何静态值
-
那么它应该如何获得第一个值呢?因为你应该将它存储到一个变量中并在
UPDATE中使用它。 -
所有行同时更新。没有顺序。 “我已经在前一行更新的值”的概念没有任何意义。
-
想象我有 2 个表,我在第一行更新它们(通过连接),但在第二个中我需要使用第二个表的更新值来获取正确的结果
标签: sql sql-server tsql sql-update