2011-03-01 84 views
10

我想從三個不同的表更新字段,但我得到了一些錯誤:如何同時更新多個表?

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 ','. 

回答

21

您無法更新從多個表中的字段單號update查詢。有錯誤你得到是因爲這是不允許的:

update a, b, c 

既然你只能更新每update命令一個表

+0

所以,我要創建一個事務,並執行三個不同的表(它們都包含指定字段/列),而不是相同的更新? – Zolomon 2011-03-01 12:45:20

+0

是的,你可以做到這一點,或作爲其他答案中提出的'dnl',你可以將你的更新封裝在存儲過程中。 – 2011-03-01 12:46:38

+0

根據我的建議,你可以在視圖中加入表格並更新視圖... – FarligOpptreden 2011-03-01 12:46:58

3

您無法在一個語句中更新多個表。一個選項是使用存儲過程

+1

+1就像存儲過程的想法一樣,我總是忘記MSSQLServer用戶looooooove存儲過程。 – 2011-03-01 12:47:07

4

正如其他答案指出的,在SQL中,UPDATE只更新一個表。對於大多數實際需求來說這通常足夠了。如果您想同時更新的幾個表格,則可以將更新放入事務中,效果通常相同。

如果您擔心得到不同的時間戳(爲您現場lockedAt)先來看看到你的數據庫文件來檢查,如果你CURRENT_TIMESTAMP功能是指交易(例如PostgreSQL)的開始時間。

0

我們可以更新它加入這樣

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 
+1

postgres沒有相關的語法 – 2017-01-11 14:20:03