📜  SQL Server如何在一个语句中更新两个表?

📅  最后修改于: 2022-05-13 01:55:12.023000             🧑  作者: Mango

SQL Server如何在一个语句中更新两个表?

在 SQL 中,需要单个查询/语句同时执行 2 个任务。例如,在单个查询/语句中同时更新 2 个不同的表。这涉及到使用BEGIN TRANSACTION子句和COMMIT子句。单独的UPDATE子句写在前一个子句之间,以同时执行两个更新。下面的文章中描述了相同的内容。对于本文,我们将使用 Microsoft SQL Server 作为我们的数据库。

第 1 步:创建数据库。为此,请使用以下命令创建一个名为 GeeksForGeeks 的数据库。

询问:

CREATE DATABASE GeeksForGeeks

输出:

第 2 步:使用 GeeksForGeeks 数据库。为此,请使用以下命令。

询问:

USE GeeksForGeeks

输出:

第 3 步:在 GeeksForGeeks 数据库中创建一个表 ECONOMICS_MARKS。该表有 ID、S_NAME 和 ECO_MARKS 3 列,分别包含学生的卷号和姓名以及学生在经济学科目中的得分。

询问:

CREATE TABLE ECONOMICS_MARKS(
ID INT,
S_NAME VARCHAR(10),
ECO_MARKS INT);

输出:

第 4 步:描述表 ECONOMICS_MARKS 的结构。

询问:

EXEC SP_COLUMNS ECONOMICS_MARKS;

输出:

第 5 步:在 GeeksForGeeks 数据库中创建一个表 COMMERCE_MARKS。该表有 3 列,即 ID、S_NAME 和 COM_MARKS,分别包含学生的卷号和姓名以及学生在商科的分数。

询问:

CREATE TABLE COMMERCE_MARKS(
ID INT,
S_NAME VARCHAR(10),
COM_MARKS INT);

输出:

第 6 步:描述表 COMMERCE_MARKS 的结构。

询问:

EXEC SP_COLUMNS COMMERCE_MARKS;

输出:

第 7 步:在 ECONOMICS_MARKS 表中插入 5 行。

询问:

INSERT INTO ECONOMICS_MARKS VALUES(1,'SAM',70);
INSERT INTO ECONOMICS_MARKS VALUES(2,'AMY',68);
INSERT INTO ECONOMICS_MARKS VALUES(3,'EMMA',69);
INSERT INTO ECONOMICS_MARKS VALUES(4,'ROB',57);
INSERT INTO ECONOMICS_MARKS VALUES(5,'KEVIN',65);

输出:

步骤 8:显示 ECONOMICS_MARKS 表的所有行。

询问:

SELECT * FROM ECONOMICS_MARKS;

输出:

第 9 步:在 COMMERCE_MARKS 表中插入 5 行。

询问:

INSERT INTO COMMERCE_MARKS VALUES(1,'SAM',80);
INSERT INTO COMMERCE_MARKS VALUES(2,'AMY',88);
INSERT INTO COMMERCE_MARKS VALUES(3,'EMMA',90);
INSERT INTO COMMERCE_MARKS VALUES(4,'ROB',75);
INSERT INTO COMMERCE_MARKS VALUES(5,'KEVIN',56);

输出:

第 10 步:显示 COMMERCE_MARKS 表的所有行。

询问:

SELECT * FROM COMMERCE_MARKS;

输出:

步骤 11:使用单个查询将id=1的学生的经济学商业标记分别更新为8075 。这涉及 2 个步骤。首先,执行ECONOMICS_MARKS表和COMMERCE_MARKS表的JOIN 。然后分别使用表EC别名,比较学生的ID (以确保从两个表中选择相同的ID最后将学生ID1 (给定值)进行比较。当这两个条件都满足时,将相应的标记更新8075 。整个事情必须包含在BEGIN TRANSACTIONCOMMIT之间,以将其视为单个ATOMIC操作。此查询涉及更新属于相同学生 ID的记录。

句法:

BEGIN TRANSACTION;
UPDATE TABLE_1
SET TABLE_1.TABLE_1_COLUMN = VALUE_1
FROM TABLE_1 T1, TABLE_2 T2
WHERE T1.ID = T2.ID
AND T1.ID = ID_VALUE_1;
UPDATE TABLE_2
SET TABLE_2.TABLE_2_COLUMN = VALUE_2
FROM TABLE_1 T1, TABLE_2 T2
WHERE T1.ID = T2.ID
AND T2.ID = ID_VALUE_2;
COMMIT;

询问:

BEGIN TRANSACTION;
UPDATE ECONOMICS_MARKS
SET ECONOMICS_MARKS.ECO_MARKS = 80
FROM ECONOMICS_MARKS E, COMMERCE_MARKS C
WHERE E.ID = C.ID
AND E.ID = 1;
UPDATE COMMERCE_MARKS
SET COMMERCE_MARKS.COM_MARKS = 75
FROM ECONOMICS_MARKS E, COMMERCE_MARKS C
WHERE E.ID = C.ID
AND C.ID = 1;
COMMIT;

输出:

第 12 步:显示更新后的 ECONOMICS_MARKS 表的所有行。

询问:

SELECT * FROM ECONOMICS_MARKS;

ID 1ECO_MARKS列的值更新为80

输出:

第 13 步:显示更新后的 COMMERCE_MARKS 表的所有行。

询问:

SELECT * FROM COMMERCE_MARKS;

注意: ID 1COM_MARKS列的值更新为75

输出:

第 14 步:使用单个查询将id=2的学生的经济学标记更新为86 ,将id=3的学生的商业标记更新为99 。此查询涉及更新属于不同学生 ID的记录。

询问:

BEGIN TRANSACTION;
UPDATE ECONOMICS_MARKS
SET ECONOMICS_MARKS.ECO_MARKS = 86
FROM ECONOMICS_MARKS E, COMMERCE_MARKS C
WHERE E.ID = C.ID
AND E.ID = 2;
UPDATE COMMERCE_MARKS
SET COMMERCE_MARKS.COM_MARKS = 99
FROM ECONOMICS_MARKS E, COMMERCE_MARKS C
WHERE E.ID = C.ID
AND C.ID = 3;
COMMIT;

输出:

第 15 步:显示更新后的 ECONOMICS_MARKS 表的所有行。

询问:

SELECT * FROM ECONOMICS_MARKS;

ID 2ECO_MARKS列的值已更新为86

输出:

第 16 步:显示更新后的 COMMERCE_MARKS 表的所有行。

询问:

SELECT * FROM COMMERCE_MARKS;

ID 3COM_MARKS列的值更新为99

输出: