2011-07-01 47 views
0

我有3個表從sql server中的單個查詢中的不同表中更新兩列?

Table1 

    Sno sname amount 
     1  aaa 23 
     2  bbb 34 
     3  ccc 98 

Table2 

    sno sprice 
     1  34 
     2  78 
     3  87 

Table3 

    sno amount sprice 
     1  65  78 
     2  43  76 
     3  34  45 

我想寫一個更新查詢更新Table 1和Table表與表3

SNO列比較。

結果是

表1

Sno sname amount 
    1  aaa 65 
    2  bbb 43 
    3  ccc 34 

The Amount column value table3 is updated into table1 amount column. 

表2

sno sprice 
    1  78 
    2  76 
    3  48 

表3的sprice值被更新爲表2 sprice柱。

這兩個操作可以在單個更新查詢本身。

如果有可能請幫助我。

回答

0

UPDATE語句只能影響單個表(除了可能包含在觸發器中的單獨語句之外)。爲什麼不直接在事務中包裝兩個更新語句?試圖在一個聲明中做到這一點的目標是什麼?

0

您可以使用主鍵和外鍵將更新級聯到單個表(請參閱代碼示例);不幸的是,除非兩個目標表的外鍵相同(在源表上的主鍵上它也有點醜陋!!),否則不能使用每個源表中的多個表執行此操作。

你也可以在這裏使用觸發器(小心!)。

下面是從表3級聯反正到Table代碼:

-- Set up Data 
CREATE TABLE table1 (
    sno SMALLINT, 
    sname VARCHAR(3), 
    amount INT, 
    CONSTRAINT PK_table1 PRIMARY KEY (
     sno, 
     amount 
    ) 
) 

INSERT INTO table1 VALUES (1, 'aaa', 23) 
INSERT INTO table1 VALUES (2, 'bbb', 34) 
INSERT INTO table1 VALUES (3, 'ccc', 98) 

CREATE TABLE table2 (
    sno SMALLINT, 
    sprice INT, 
    CONSTRAINT PK_table2 PRIMARY KEY (
     sno, 
     sprice 
    ) 
) 

INSERT INTO table2 VALUES (1, 34) 
INSERT INTO table2 VALUES (2, 78) 
INSERT INTO table2 VALUES (3, 87) 


CREATE TABLE table3 (
    sno SMALLINT, 
    amount INT, 
    sprice INT, 
    CONSTRAINT PK_table3 PRIMARY KEY (
     sno, 
     amount 
    ) 
) 

-- Data same as table1 and table2 for starting 
INSERT INTO table3 VALUES (1, 23, 34) 
INSERT INTO table3 VALUES (2, 34, 78) 
INSERT INTO table3 VALUES (3, 98, 87) 

-- Cascading updates between foreign keyed tables 
ALTER TABLE table1 ADD CONSTRAINT FK_table1_table3 FOREIGN KEY (sno, amount) REFERENCES table3 (sno, amount) ON UPDATE CASCADE 

-- Original Table 1 
SELECT * FROM table1 

-- Updates table 3 (cascades to table 1) 
UPDATE table3 
SET amount = 65, 
    sprice = 78 
WHERE sno = 1 

UPDATE table3 
SET amount = 43, 
    sprice = 76 
WHERE sno = 2 

UPDATE table3 
SET amount = 34, 
    sprice = 45 
WHERE sno = 3 

-- Prove cascade 
SELECT * 
FROM table1 

--Tidy Up 
DROP TABLE table1 
DROP TABLE table2 
DROP TABLE table3 
相關問題