2011-07-01 7 views
0

私は私が表3SQL Serverの単一クエリで異なるテーブルの2つの列を更新しますか?

SNO列と比較TABLE1とtable2のテーブルを更新するために、単一の更新クエリを作成したい3つのテーブル

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 

を持っています。

結果は、表3のsprice値は表2のsprice列に更新される表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 

あります。

この2つの操作は、単一の更新クエリ自体で実行できます。

可能であれば、私を助けてください。

答えて

0

UPDATEステートメントは、(トリガーに含まれる可能性のある別のステートメント以外の)単一のテーブルにしか影響しません。トランザクション内に2つの更新ステートメントをラップするだけではどうですか? 1つの声明でこれを行うことの目標は何ですか?

0

プライマリキーと外部キーを使用して、単一のテーブルに更新をカスケードすることができます(コード例を参照)。残念ながら、2つのターゲットテーブルの外部キーが同じでない限り、ソーステーブルの複数のテーブルでこれを行うことはできません(ソーステーブルのプライマリキーに関しては少し醜いです!!)。

ここでもトリガーを使用することができます(慎重に!)。

ここではとにかくTABLE1する表3からのカスケードのためのコードがあります:

-- 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 
関連する問題