Как я могу условно обновить поле text / ntext в SQL? - PullRequest
0 голосов
/ 07 октября 2009

В хранимой процедуре я пытаюсь условно обновить поле (как 2-я строка в инструкции SQL ниже)

UPDATE [some_stuff] SET
  last_update = CASE WHEN val = @NewVal THEN last_update ELSE GETDATE() END,
  val = @NewVal

... но для поля text / ntext. Какой самый эффективный способ сделать это? Это должен быть отдельный оператор UPDATETEXT? И нужно ли мне сначала делать дополнительные SELECT

Ответы [ 2 ]

3 голосов
/ 07 октября 2009

Приведенный выше пример будет работать в SQL Server 2005, где val - это текстовое поле, а вы обновляете все значение. Если вы заменяете только часть поля, используйте UPDATETEXT в отдельной инструкции.

Лучшее решение, если вы можете обновить схему, это использовать столбцы VARCHAR (MAX) или NVARCHAR (MAX). Команда UPDATETEXT была помечена как устаревшая в следующем выпуске SQL Server. Если вы используете эти типы данных, вы можете использовать column_name.WRITE в операторе UPDATE, чтобы заменить часть значения.

0 голосов
/ 07 октября 2009

Возможно, пример нереалистичен, но не могли бы вы упростить это до:

UPDATE [some_stuff] 
SET last_update =  GETDATE()
WHERE val != @NewVal

Первая половина случая просто устанавливает само поле, что кажется бессмысленным.

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