简介
SQL Server MERGE 语句是一个功能强大的工具,它允许您在一次操作中执行插入、更新和删除操作。MERGE 语句与 INSERT、UPDATE 和 DELETE 语句相比具有几个优点,包括:
它可以原子地执行多个操作,确保要么所有操作都成功,要么都不成功。
它可以根据目标表的现有数据有条件地执行操作。
它使用户可以轻松地在单个语句中合并多个数据源。
多级标题
语法
MERGE 语句的语法如下:```sql MERGE INTO target_table AS target USING source_table AS source ON (target.column_name = source.column_name) WHEN MATCHED THENUPDATE SET target.column_name = source.column_name WHEN NOT MATCHED BY SOURCE THENINSERT (target.column_name, ...) VALUES (source.column_name, ...) WHEN NOT MATCHED BY TARGET THENDELETE; ```
内容详细说明
目标表
`target_table` 是您要对其执行操作的目标表。
源表
`source_table` 是您要从中获取数据的源表。
联接条件
`ON` 子句指定用于将目标表和源表行匹配的联接条件。
WHEN MATCHED 子句
`WHEN MATCHED` 子句指定当目标表和源表的行匹配时要执行的操作。通常,它涉及更新目标表中的列。
WHEN NOT MATCHED BY SOURCE 子句
`WHEN NOT MATCHED BY SOURCE` 子句指定当源表中没有匹配的目标表中的行时要执行的操作。通常,它涉及向目标表中插入新行。
WHEN NOT MATCHED BY TARGET 子句
`WHEN NOT MATCHED BY TARGET` 子句指定当目标表中没有匹配的源表中的行时要执行的操作。通常,它涉及从目标表中删除行。
示例
以下示例演示如何使用 MERGE 语句在 `Customers` 表中插入、更新和删除数据:```sql MERGE INTO Customers AS target USING NewCustomers AS source ON (target.CustomerID = source.CustomerID) WHEN MATCHED THENUPDATE SET target.ContactName = source.ContactName,target.City = source.City WHEN NOT MATCHED BY SOURCE THENINSERT (CustomerID, ContactName, City)VALUES (source.CustomerID, source.ContactName, source.City) WHEN NOT MATCHED BY TARGET THENDELETE; ```此示例将执行以下操作:
将 `NewCustomers` 表中的行插入到 `Customers` 表中,如果 `CustomerID` 匹配。
更新 `Customers` 表中与 `NewCustomers` 表匹配的行,如果 `CustomerID` 匹配。
从 `Customers` 表中删除与 `NewCustomers` 表不匹配的行。
**简介**SQL Server MERGE 语句是一个功能强大的工具,它允许您在一次操作中执行插入、更新和删除操作。MERGE 语句与 INSERT、UPDATE 和 DELETE 语句相比具有几个优点,包括:* 它可以原子地执行多个操作,确保要么所有操作都成功,要么都不成功。 * 它可以根据目标表的现有数据有条件地执行操作。 * 它使用户可以轻松地在单个语句中合并多个数据源。**多级标题****语法**MERGE 语句的语法如下:```sql MERGE INTO target_table AS target USING source_table AS source ON (target.column_name = source.column_name) WHEN MATCHED THENUPDATE SET target.column_name = source.column_name WHEN NOT MATCHED BY SOURCE THENINSERT (target.column_name, ...) VALUES (source.column_name, ...) WHEN NOT MATCHED BY TARGET THENDELETE; ```**内容详细说明****目标表**`target_table` 是您要对其执行操作的目标表。**源表**`source_table` 是您要从中获取数据的源表。**联接条件**`ON` 子句指定用于将目标表和源表行匹配的联接条件。**WHEN MATCHED 子句**`WHEN MATCHED` 子句指定当目标表和源表的行匹配时要执行的操作。通常,它涉及更新目标表中的列。**WHEN NOT MATCHED BY SOURCE 子句**`WHEN NOT MATCHED BY SOURCE` 子句指定当源表中没有匹配的目标表中的行时要执行的操作。通常,它涉及向目标表中插入新行。**WHEN NOT MATCHED BY TARGET 子句**`WHEN NOT MATCHED BY TARGET` 子句指定当目标表中没有匹配的源表中的行时要执行的操作。通常,它涉及从目标表中删除行。**示例**以下示例演示如何使用 MERGE 语句在 `Customers` 表中插入、更新和删除数据:```sql MERGE INTO Customers AS target USING NewCustomers AS source ON (target.CustomerID = source.CustomerID) WHEN MATCHED THENUPDATE SET target.ContactName = source.ContactName,target.City = source.City WHEN NOT MATCHED BY SOURCE THENINSERT (CustomerID, ContactName, City)VALUES (source.CustomerID, source.ContactName, source.City) WHEN NOT MATCHED BY TARGET THENDELETE; ```此示例将执行以下操作:* 将 `NewCustomers` 表中的行插入到 `Customers` 表中,如果 `CustomerID` 匹配。 * 更新 `Customers` 表中与 `NewCustomers` 表匹配的行,如果 `CustomerID` 匹配。 * 从 `Customers` 表中删除与 `NewCustomers` 表不匹配的行。