SQL 2005/8古怪更新“黑色艺术”

时间:2010-11-02 21:59:12

标签: sql sql-server tsql sql-update

所有SQL Server Blackbelt都在那里掌握。

我有一个我需要解决的简单问题。我想在桌子上做一些奇怪的更新。该表的具体结构并不重要,我的问题基本上可以简化为以下一个:

update SalesTotal
set @total = total = @total + sales,
@flag = flag = case when @flag = 1 then 0 
                    when @total > x then 1
                    else 0 end

问题是我能相信@total变量会有一个新值,即。将在第二个设置部分之前执行,或者它是否包含“旧”值(来自先前的赋值),或者它是未定义的。我现在一直在追求这个问题,并且找不到解决方案,这对我的更新非常重要(我想一次更新一个表)。我想要更新的值之一取决于另一个值(在同一行中),因此它在单个更新中工作的唯一方法是它是否有效。

希望你能帮助我

1 个答案:

答案 0 :(得分:14)

不,你不能对命令执行顺序做出任何假设。绝对无法保证表中更新的顺序,绝对不能保证每个表SET的@variable都会更新一次,并且更新可能会在Halloween protection的假脱机步骤中运行