SQL 2005/8 Причудливое обновление "Чёрное искусство" - PullRequest
2 голосов
/ 03 ноября 2010

Привет всем мастерам 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 Ответ

14 голосов
/ 03 ноября 2010

Нет, вы не можете делать какие-либо предположения относительно императивного порядка исполнения.Нет абсолютно никакой гарантии относительно порядка размещения обновлений в таблице, абсолютно нет гарантии, что @variable обновляется один раз для каждой таблицы SET, и обновление вполне может выполняться с шагом спула для Защита Хэллоуина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...