我想更新表中的两列,其中一列取决于另一个更新列的计算。计算相当复杂,所以我不想每次重复,我只想使用新更新的值。
CREATE TABLE test (
A int,
B int,
C int,
D int
)
INSERT INTO test VALUES (0, 0, 5, 10)
UPDATE test
SET
B = C*D * 100,
A = B / 100
所以我的问题是,这甚至可以在一个查询中将50
作为A列的值吗?
另一个选择是使用持久计算列,但是当我依赖于另一个计算列时它会工作吗?
答案 0 :(得分:2)
您无法在单个查询中实现您的目标。这是由于名为 All At Once Operations 的概念转换为"在SQL Server中,出现在Same中的操作逻辑阶段同时进行评估。" ..
以下操作不会产生您期望的结果
insert into table1
(t1,t1+100,t1+200)-- sql wont use new t1 incremented value
同样适用于更新
update t1
set t1=t1*100
t2=t1 --sql wont use t1 updated value(*100)
<强>参考文献:强>
TSQL Querying by Itzik Ben-Gan