代码之家  ›  专栏  ›  技术社区  ›  luckyluke

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

  •  2
  • luckyluke  · 技术社区  · 14 年前

    嗨,所有的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 variable将有一个新值,即在第二个集合部分之前执行,或者它是否包含一个“旧”值(来自以前的赋值),或者它是未定义的。我正在研究这个问题一段时间了,找不到解决方案,这对我的更新非常重要(我想一次更新一个表)。我要更新的一个值取决于另一个值(在同一行中),因此它在一次更新中工作的唯一方法是它是否工作。

    1 回复  |  直到 12 年前
        1
  •  14
  •   Abe Miessler    14 年前

    不,你不能假设强制执行的顺序。绝对不能保证更新在表中定位位置的顺序,绝对不能保证每个表集的@variable都更新一次,并且更新可以使用 Halloween protection .