ОБНОВЛЕНИЕ SQL УСТАНАВЛИВАЕТ один столбец на другое значение и меняет значение на том же шаге - PullRequest
8 голосов
/ 15 сентября 2011

Возьмите следующий оператор обновления.

UPDATE  TABLE_1
SET     Units2 = ABS(Units1)
        ,Dollars2=ABS(Dallars1)
        ,Units1 =0
        ,Dollars1 =0
WHERE Units1 < 0
AND   Dollars2 = 0

Вот мои вопросы,

1) Это законно? Он анализируется и «кажется» работает (на тестовой таблице), но будет ли он работать всегда или я просто выбираю нужные записи для просмотра.

2) есть ли лучший способ сделать это.

Спасибо

Ответы [ 3 ]

5 голосов
/ 15 сентября 2011

Это законно, и до тех пор, пока вы хотите сохранить старые значения Units1 и Dollars1 в Units2 и Dollars2, которые должны работать

Вот тест:

CREATE TABLE #Table_1
(
    Units1 INT,
    Dollars1 MONEY,
    Units2 INT,
    Dollars2 MONEY
)
GO

INSERT INTO #Table_1 (Units1, Dollars1, Units2, Dollars2)
VALUES (-1,12.00,3,0.00)
GO

UPDATE  #TABLE_1
SET     Units2 = ABS(Units1)
        ,Dollars2=ABS(Dollars1)
        ,Units1 =0
        ,Dollars1 =0
WHERE Units1 < 0
AND   Dollars2 = 0
GO

SELECT * 
FROM  #Table_1

Выходы:

Units1 | Dollars1 | Units2| Dollars2
0      | 0.00     | 1     | 12.00
4 голосов
/ 15 сентября 2011

Предполагая, что вы говорите о столбце Dollars1, я думаю, что все должно быть в порядке. Чтения должны использовать текущее значение, записи фиксируются после выполнения расчетов.

Если вы спрашиваете об этом сейчас, я бы предложил разбить его на два утверждения. Вы автор, и вам не ясно. Пожалей парня, который должен его поддерживать, и проясни это сейчас.

1 голос
/ 15 сентября 2011

Ваш запрос правильный и в значительной степени способ сделать это.

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