📅  最后修改于: 2023-12-03 15:05:38.108000             🧑  作者: Mango
在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被插入到了目标表中。
通过合并,我们可以轻松地将数据从一个表复制到另一个表,并根据需要更新现有记录。