6.MERGE 语句
在SQL Server 2008中,可以使用MERGE语句在一条语句中根据与源表联接的结果对目标表执行 insert、update或delete操作。如:使用一个语句有条件地在单个目标表中插入或更新行,如果目标表中存在相应行,则更新一个或多个列;否则,会将数据插入新行。使用该语句还可以同步两个表,根据与源数据的差别在目标表中插入、更新或删除行。
MERGE 语法包括如下五个主要子句:
MERGE 子句用于指定作为插入、更新或删除操作目标的表或视图。
USING 子句用于指定要与目标联接的数据源。
ON 子句用于指定决定目标与源的匹配位置的联接条件。
WHEN 子句用于根据 ON 子句的结果指定要执行的操作。
OUTPUT 子句针对更新、插入或删除的目标对象中的每一行返回一行。
其完整的语法格式如下:
[ WITH [,…n] ] MERGE [ TOP ( expression ) [ PERCENT ] ] [ INTO ] target_table [ WITH ( ) ] [ [ AS ] table_alias ] USING ON [ WHEN MATCHED [ AND ] THEN ] [ WHEN NOT MATCHED [ BY TARGET ] [ AND ] THEN ] [ WHEN NOT MATCHED BY SOURCE [ AND ] THEN ] [ ] [ OPTION ( [ ,…n ] ) ] |
使用下面的语句创建两个表:
GO |
两个表中的数据如下图所示:
请注意,这两个表中有两个共有的产品-客户行:客户 11794 购买了产品 707,客户 15160 购买了产品 870。对于这些行,可以使用 WHEN MATCHED THEN 子句利用 Purchases 中这些购买记录的日期来更新 FactBuyingHabits。我们可以使用 WHEN NOT MATCHED THEN 子句将所有其他行插入 FactBuyingHabits。参考下面的语句:
MERGE dbo.FactBuyingHabits AS Target USING (select CustomerID, ProductID, PurchaseDate FROM dbo.Purchases) AS Source ON (Target.ProductID = Source.ProductID AND Target.CustomerID = Source.CustomerID) WHEN MATCHED THEN update SET Target.LastPurchaseDate = Source.PurchaseDate WHEN NOT MATCHED BY TARGET THEN insert (CustomerID, ProductID, LastPurchaseDate) VALUES (Source.CustomerID, Source.ProductID, Source.PurchaseDate) OUTPUT $action, inserted.*, deleted.*; |
$action用于在 OUTPUT 子句中指定一个 nvarchar(10) 类型的列,列的值是代表所执行操作的insert、update或delete。inserted.*和deleted.*分别用于指定返回所有插入行的列和删除行的列。如果要指定具体的列,可以使用inserted.ProductID这样的命名方式。
上面语句的输出结果如下:
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
SQL Server 2008将退出微软主流数据库支持
你的企业是否还在运行SQL Server 2008?请注意微软为SQL Server 2008提供的主流技术支持服务将于今年的7月8日正式结束。
-
了解SQL Server 2012的存储过程功能
在应用新版本的SQL Server数据库之前,一些指导性的建议是非常有必要的。为此,专家的建议是了解一些更多存储过程新功能。
-
SQL Server 2008中的对称密钥加密
证书和非对称密钥使用数据库级的内部公钥加密数据,并且使用数据库级内部私钥解密数据。而对称密钥相对简单,它们包含一个同时用来加密和解密的密钥。
-
通过PassPhrase对SQL Server 2008加密
与数字证书类似,SQL Server 证书包括公钥和私钥这一对密钥,它们都用来加密和解密数据。SQL Server也拥有创建非对称密钥和对称密钥对象的能力。