Как обновить несколько таблиц одновременно? - PullRequest
12 голосов
/ 01 марта 2011

Я пытаюсь обновить поля из трех разных таблиц, но я получаю некоторые ошибки:

UPDATE 
  a, b, c
SET 
  a.Locked = 0, 
  b.Locked = 0, 
  c.Locked = 0, 
  a.LockedByUsername = 'zolomon', 
  b.LockedByUsername = 'zolomon', 
  c.LockedByUsername = 'zolomon', 
  a.LockedAt = CURRENT_TIMESTAMP, 
  b.LockedAt = CURRENT_TIMESTAMP, 
  c.LockedAt = CURRENT_TIMESTAMP
FROM 
  TableA AS a
  INNER JOIN TableB as b ON n.Objid = o.Objid
  INNER JOIN TableC as c ON n.Namnid = e.Namnid 
WHERE
  a.Namn1 = 'FirstName LastName' AND b.objektkod='SomeIdentifier'

И ошибки:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ','.

Ответы [ 4 ]

25 голосов
/ 01 марта 2011

Нельзя обновить поля из нескольких таблиц в одном запросе update.Вы получаете ошибку, потому что это не разрешено:

update a, b, c

Так как вы можете обновить только одну таблицу для update команды.

4 голосов
/ 01 марта 2011

Как указывают другие ответы, в SQL UPDATE обновляет только одну таблицу.Этого обычно достаточно для большинства практических нужд.Если вы хотите обновить несколько таблиц одновременно , вы можете просто поместить обновления в транзакцию, и эффект, как правило, будет таким же.

Если вы беспокоитесь о том, чтобы получить другоевременные метки (для вашего поля lockedAt) сначала просмотрите документы базы данных, чтобы проверить, относится ли ваша функция CURRENT_TIMESTAMP к времени начала транзакции (например, PostgreSQL ).

3 голосов
/ 01 марта 2011

вы не можете обновить несколько таблиц в одном операторе.вариант будет использовать хранимую процедуру

0 голосов
/ 18 октября 2016

Мы можем обновить его с помощью соединения, как это

UPDATE table1 
INNER join table2 on table1.id=table2.tab1_id
INNER join table3 on table1.id=table3.tab1_id
SET table1.status=1,table2.status=1,table3.status=1,table1.name='Premjith'
WHERE table1.id=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...