SQL 2000:更新语句中的变量和评估顺序

时间:2010-09-01 04:54:11

标签: sql sql-server

我在此表单中有更新语句:

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)?

无法保证选择语句的评估顺序。这对于更新声明也是如此吗?

非常感谢。

2 个答案:

答案 0 :(得分: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 :(得分:1)

SQL是一种声明性语言。不要试图在其中做必要的构造。这不是C。 任何语句(SELECT,DELETE,UPDATE,MERGE,INSERT,true,any)都不保证评估顺序。