2010-09-01 72 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