如何同时更新多个表?

Zol*_*mon 13 t-sql

我正在尝试更新三个不同表中的字段,但我遇到了一些错误:

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'
Run Code Online (Sandbox Code Playgroud)

而错误:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ','.
Run Code Online (Sandbox Code Playgroud)

Pab*_*ruz 26

您无法在单个update查询中更新多个表中的字段.你得到的错误是因为这是不允许的:

update a, b, c
Run Code Online (Sandbox Code Playgroud)

因为每个命令只能更新一个表update.


Dan*_*tik 6

您不能在一个语句中更新多个表。一种选择是使用存储过程


leo*_*loy 5

正如其他答案所指出的那样,在SQL中,UPDATE仅更新一个表。通常,这对于大多数实际需求已经足够了。如果要更新多个表在同一时间,你可以把更新事务内,效果通常会是一样的。

如果您担心要获取不同的时间戳(针对您的field lockedAt),请首先查看数据库文档,以检查您的CURRENT_TIMESTAMP函数是否引用了事务的开始时间(例如PostgreSQL)。