Цель состоит в том, чтобы предотвратить обновления для строк, в которых новое значение идентично старому значению (поскольку таблица имеет автоматически обновляемую метку времени, которую я не хочу сбрасывать).
Проблема заключается в том, чтонекоторые столбцы обнуляются, поэтому New <> Old не работает, так как это приводит к NULL, если New или Old равен NULL.
Обходной путь использует ISNULL, но это не работает, если значение замены может бытьдопустимое значение в таблице:
UPDATE tableName
SET ColumnName = @newValue
WHERE ISNULL(ColumnName, 'ValueIsNull') <> ISNULL(@newValue, 'ValueIsNull')
Другой способ, который я нашел, это сравнение значений, а затем проверка XOR New и Old, чтобы увидеть, является ли либо NULL.Это не очень понятно, особенно если вам нужно проверить несколько столбцов:
UPDATE tableName
SET ColumnName = @newValue
WHERE
ColumnName <> @newValue
OR (
(ColumnName IS NULL AND @newValue IS NOT NULL)
OR (ColumnName IS NOT NULL AND @newValue IS NULL)
)
Есть ли лучший способ сделать это?