Sql server 2008 是否在sql server的单个查询中更新来自不同表的两列?
我有三张桌子Sql server 2008 是否在sql server的单个查询中更新来自不同表的两列?,sql-server-2008,Sql Server 2008,我有三张桌子 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
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
我想编写一个更新查询来更新表1和表2,并与表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列
这两个操作可以在单个更新查询本身中完成
如果可能,请帮助我。UPDATE语句只能影响单个表(除了可能包含在触发器中的单独语句)。为什么不在一个事务中包装这两个update语句呢?在单个语句中尝试这样做的目的是什么?您可以使用主键和外键将更新级联到单个表(参见代码示例);不幸的是,除非两个目标表的外键相同(就源表的主键而言,这也有点难看!!),否则不能对每个源表中的多个表执行此操作 你也可以在这里使用触发器(小心!) 下面是从表3到表1的级联代码:
-- 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