Безопасно ли ОБНОВЛЯТЬ поле таблицы с предложением WHERE, проверяющим это же поле? - PullRequest
2 голосов
/ 10 июня 2009

Я имею в виду нечто подобное:

UPDATE [MyTable]
SET [SomeField] = 1
WHERE [SomeField] is NULL

Будет ли это работать или это похоже на изменение коллекции при ее повторении?

Или, может быть, написать что-то вроде этого?

UPDATE [MyTable]
SET [SomeField] = 1
WHERE [ID] IN (SELECT [ID]
               FROM [MyTable]
               WHERE [SomeField] is NULL)

Ответы [ 2 ]

8 голосов
/ 10 июня 2009

Да. Операция обновления будет выполняться только в тех строках таблицы, которые соответствуют предложению WHERE.

Представьте, что предложение WHERE выбирает строки, а затем предложение SET обновляет эти выбранные строки.

4 голосов
/ 10 июня 2009

Просто чтобы прояснить, нужно всего лишь сделать

UPDATE [MyTable]
SET [SomeField] = 1
WHERE [SomeField] is NULL

, поскольку предложение where используется только для уменьшения области применения обновления.

Звучит так, как будто вы переходите на SQL из опыта разработки, поэтому один совет, который вам может пригодиться, - это попробовать свои операции в транзакции. Таким образом, вы можете отменить любые ошибки и улучшить SQL, над которым вы работаете.

Чтобы использовать этот прогон

BEGIN TRAN

перед выполнением команды, которую вы хотите проверить, а затем

ROLLBACK TRAN

чтобы отменить или

COMMIT TRAN

чтобы сделать его постоянным

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