📜  tsql 合并示例 - SQL (1)

📅  最后修改于: 2023-12-03 15:05:38.108000             🧑  作者: Mango

T-SQL合并示例 - SQL

在T-SQL中,合并是指将源表中的数据插入到目标表中。如果源表中的数据已经存在于目标表中,则根据指定的匹配条件更新目标表中的数据。

下面是一个合并示例:

源表和目标表

我们将创建一个源表和一个目标表,分别用于存储员工信息和目标表。源表中包含员工的姓名和电话号码,目标表中只包含员工的姓名。

-- 创建源表
CREATE TABLE #Employees
(
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    PhoneNumber NVARCHAR(20)
)

-- 插入数据
INSERT INTO #Employees (FirstName, LastName, PhoneNumber)
VALUES ('John', 'Doe', '555-1234'),
       ('Jane', 'Doe', '555-5678'),
       ('Bob', 'Smith', '555-8765')

-- 创建目标表
CREATE TABLE #TargetEmployees
(
    FirstName NVARCHAR(50)
)

-- 插入数据
INSERT INTO #TargetEmployees (FirstName)
VALUES ('John'),
       ('Jane'),
       ('Mike')
合并语句

下面是一个合并语句,它将源表中的数据插入到目标表中。如果源表中的数据已经存在于目标表中,则根据员工的姓名更新目标表中的数据。

MERGE INTO #TargetEmployees AS Target
USING (
    SELECT FirstName, PhoneNumber
    FROM #Employees
) AS Source
ON Target.FirstName = Source.FirstName
WHEN MATCHED THEN
    UPDATE SET Target.FirstName = Source.FirstName, Target.PhoneNumber = Source.PhoneNumber
WHEN NOT MATCHED BY TARGET THEN
    INSERT (FirstName, PhoneNumber) VALUES(Source.FirstName, Source.PhoneNumber);
合并结果

执行上述合并语句后,我们可以检查目标表的内容是否已被更新:

SELECT * FROM #TargetEmployees

输出如下:

| FirstName | | --------- | | John | | Jane | | Bob | | Mike |

我们可以看到,已存在的John和Jane的电话号码被更新了,Bob和Mike被插入到了目标表中。

通过合并,我们可以轻松地将数据从一个表复制到另一个表,并根据需要更新现有记录。