Я хочу обновить две таблицы за один раз. Как мне это сделать в SQL Server 2005?
UPDATE
Table1,
Table2
SET
Table1.LastName='DR. XXXXXX',
Table2.WAprrs='start,stop'
FROM
Table1 T1,
Table2 T2
WHERE
T1.id = T2.id
AND
T1.id = '010008'
sql
sql-server
sql-server-2005
tsql
Джанго
источник
источник
Ответы:
Вы не можете обновить несколько таблиц в одном операторе, однако вы можете использовать транзакцию, чтобы убедиться, что два
UPDATE
оператора обрабатываются атомарно. Вы также можете пакетировать их, чтобы избежать поездки в оба конца.источник
Вы не можете обновить две таблицы одновременно, но вы можете связать обновление с использованием вставки
OUTPUT INTO
, и вы можете использовать эти выходные данные как объединение для второго обновления:Я изменил
WHERE
условие вашего примера на другое поле, отличное отid
. Если этоid
вам не нужноOUTPUT
, вы можете простоUPDATE
второй стол для того жеid='010008'
.источник
T1.field
должно бытьTable1.field
?Извините, афаик, вы не можете этого сделать. Чтобы обновить атрибуты в двух разных таблицах, вам необходимо выполнить два отдельных оператора. Но они могут быть в пакетном режиме (набор SQL отправляется на сервер в один прием)
источник
Краткий ответ на этот вопрос - нет. Хотя вы можете ввести несколько таблиц в
from
предложении оператора обновления, вы можете указать только одну таблицу послеupdate
ключевого слова. Даже если вы напишете «обновляемое» представление (которое является просто представлением, которое следует определенным ограничениям), обновления, подобные этому, завершатся неудачно. Вот соответствующие клипы из документации MSDN (акцент мой).ОБНОВЛЕНИЕ (Transact-SQL)
СОЗДАТЬ ВИД (Transact-SQL)
Честно говоря, однако, вы должны рассмотреть возможность использования двух разных операторов SQL в транзакции, как показано в примере Л.Бушкина.
ОБНОВЛЕНИЕ: мое первоначальное утверждение, что вы можете обновить несколько таблиц в обновляемом представлении, было неверным. На SQL Server 2005 и 2012 он выдаст следующую ошибку. Я исправил свой ответ, чтобы отразить это.
источник
INSTEAD OF Specifies that the DML trigger is executed instead of the triggering SQL statement, therefore, overriding the actions of the triggering statements. INSTEAD OF cannot be specified for DDL or logon triggers.
Это работает для MySQL и на самом деле просто неявная транзакция, но она должна выглядеть примерно так:
если вы делаете обновления для нескольких таблиц, которые требуют нескольких операторов ... что, вероятно, возможно, если вы обновляете одну, а затем другую на основе других условий ... вам следует использовать транзакцию.
источник
Вы должны поместить два оператора обновления в транзакцию
источник
Вы можете написать оператор обновления для одной таблицы, а затем триггер при обновлении первой таблицы , который обновит вторую таблицу
источник
С моей точки зрения, вы можете сделать это, одно-одно обновление двух таблиц в SQL SERVER:
источник
Это так же просто, как этот запрос, показанный ниже.
источник