2012-12-18 4 views
1

Я обменивать значения столбцов в таблице, используя следующее заявление:SQL Column Своп Поведение

UPDATE SwapTable 
SET ValueA=ValueB 
    ,ValueB=ValueA 

Это работает, и значение действительно становится местами, как можно проверить с помощью этой SQL Fiddle.

Однако, если бы мы сделали это в основном (в основном на любом другом языке), мы получим как ValueA, так и ValueB, имеющие одинаковые значения.

Так что мой вопрос в том, почему/как это работает в SQL.

ответ

4

Вы можете просто просмотреть план выполнения.

  1. Выделите все строки из таблицы и сделайте их как набор строк.
  2. Открыть транзакция
  3. Обновления таблицы ссылки (SwapTable) с соответствующим адресом строки, из старых значений, считанные из строки установить для опорного поля.
  4. Commit - обновление.
+0

У вас есть мой вопрос не так. Мой вопрос: если ValueA = ValueB, то при попытке ValueB = ValueA оба столбца должны иметь одинаковые значения, но значения фактически меняются местами. ЗАЧЕМ? –

+0

@SHAKIRSHABBIR, потому что НИЧЕГО не изменилось ПЕРЕД КОМИТЕТОМ. В вашем втором выражении «ValueB = ValueA» используется старое (неизмененное) значение. – valex

+0

Да, я имел в виду то же самое, что и valex. В вашем заявлении «ValueB = ValueA» ValueB является полем referece - target; а не значение, ValueA отправляется из набора строк - фактическое значение; а не цель. И набор строк замораживается после извлечения из таблицы. Никакой проблемы вообще до и после строки фиксации. – tsohr