2010-09-01 103 views
0

的順序變量我有這種形式的更新聲明:SQL 2000:在UPDATE語句和評估

declare @v as int 
update tbl 
set @v=tbl.a=(select sum(amount) from anothertable at where at.x = tbl.y), 
    tbl.b = @v/2 

我想用一個變量的原因是爲了避免使用子查詢的兩倍。問題是,我還沒有找到任何引用說明這是安全的。第二次賦值(即tbl.b = @ v/2)總是在第一次賦值之後進行評估?

select聲明的評估順序不能保證。更新陳述也是如此嗎?

非常感謝。

回答

2

你可以擺脫自己的擔心評價的順序與此:

UPDATE tbl 
SET tbl.a = s.theSum, 
    tbl.b = s.theSum/2 
FROM tbl 
INNER JOIN (
    SELECT x, SUM(amount) AS thesum 
    FROM anothertable 
    GROUP BY x 
) s ON s.x = tbl.y 
1

SQL是一種聲明性語言。不要試圖在其中做命令式的構造。這不是C。 在任何語句(SELECT,DELETE,UPDATE,MERGE,INSERT,真的,任何語句)中都不保證評估的順序。

+0

微軟聲稱它顯然是「選擇」語句而不是更新語句。 你有關於更新聲明的任何文檔參考? – yioann 2010-09-01 05:22:52