Как отправить пакет обновлений с операторами одновременно в SQL

BEGIN TRANSACTION UPDATE table_x SET Part = 8 WHERE A = 2 AND B = 2 AND C = 1 AND Code = 'X' UPDATE table_x SET Part = 0 WHERE A = 2 AND B = 2 AND C = 1 AND Code = 'Y' UPDATE table_x SET Part = 2 WHERE A = 2 AND B = 2 AND C = 1 AND Code = 'Z' COMMIT TRANSACTION 

В принципе, у нас есть три строки, которые вместе должны иметь значение, равное 10 (как вы видите теперь, это 8 + 0 + 2 = 10). У меня есть триггер, который проверяет, что при обновлении или вставке новых значений всегда должно быть 10, но пока он не сможет обновиться, так как он отправляет первое ОБНОВЛЕНИЕ «WHERE A = 2 AND B = 2 AND C = 1 AND Code = 'X' ", и сумма в большинстве случаев не будет проходить, так как она будет больше или меньше 10.

Я хочу отправить все эти ОБНОВЛЕНИЯ одновременно, чтобы значения изменялись вместе. Есть ли способ сделать это?

SQL Server на самом деле немного умнее о запуске, поэтому один оператор должен работать:

 UPDATE table_x SET Part = (CASE Code WHEN 'X' THEN 8 WHEN 'Y' THEN 0 ELSE 2 END) WHERE A = 2 AND B = 2 AND C = 1 AND Code IN ('X', 'Y', 'Z'); 

Сам триггер должен быть очень умным, чтобы проверять inserted значения, а не значения в таблице, но это выполнимо.

Альтернативно (и, возможно, лучшее решение при некоторых обстоятельствах) заключается в отключении триггера для обновлений. Это имеет то преимущество, что код запуска не нуждается в изменении.

Это то, что вы хотите сделать:

  UPDATE table_x SET Part = CASE WHEN Code = 'X' THEN 8 WHEN Code = 'Y' THEN 0 WHEN Code = 'Z' THEN 2 END WHERE A = 2 AND B = 2 AND C = 1 AND Code IN ('X','Y','Z') 
  • SELECT подмножество (n = 1) записей, которые имеют один и тот же класс в столбце категории
  • Удалить из FILETABLE с ограничением внешнего ключа
  • Выбрать отличное от условия
  • Различные результаты при выполнении той же хранимой процедуры
  • Извлечь значения> 1.00 из базы данных
  • SQL Server - как запросить набор максимальных чисел из списка чисел сверху вниз
  • Как добавить параметры для нескольких агентов для исключения из отчета статистики SSRS
  • SQL Server 2014 Вставить, где НЕ ВХОД
  • SQL Server: как создать нулевую таблицу с определенными размерами n и m?
  • Хранить объект c # в базе данных сервера sql
  • Что такое эквивалент «объект» в SQL Server?
  • Interesting Posts

    Исключение обрыва данных не печатает имя столбца

    SQL – Получить список на основе столбца таблицы

    Как пропустить все таблицы SQL?

    Как обновить таблицу с помощью хранимых процедур в SQL Server

    Запрос SQL INSERT INTO 3 раза

    Получить различное количество строк для каждой категории из таблицы SQL Server

    Изучение async DB IO – в чем причина «Период ожидания, прошедший при попытке использовать подтверждение подтверждения авторизации перед входом»?

    Динамический SQL-запрос для отображения всех данных главной таблицы

    Как мне лучше избегать использования зарезервированных или ключевых слов на моем языке или в рамках?

    Просмотреть выполненный sql из динамического sql

    Соединение, не работающее для сервера MSSQL 2008 (ошибка поиска сервера / экземпляра)

    Weird Time Difference в SQL Server

    Кластеризованные индексы на столбцах, не являющихся идентификаторами, для ускорения объемных вставок?

    Использование более двух предложений where в одном запросе на обновление в SQL Server

    Сделать одну таблицу равной другой без удаления *

    Давайте будем гением компьютера.