学会使用Merge语句
在SQL Server 中有一个新的MERGE语句让我有一点点激动SQL Server开发者在编写修改表的存储过程时会非常喜欢这个新的TSQL语法使用IFTHEN来决定一个数据行是否需要被插入更新或删除的时代已经过去了MERGE让我们可以一次搞定所有的逻辑和修改而且你可以一次就能搞定整个数据集的对比不用再逐行进行对比以下是使用MERGE语句的一个例子
MERGE tbl_address AS current_addresses
USING (
SELECT customer_objid = address_label
addressline addressline city region country zip
code is_deleted
FROM @addresses)
AS
source_addresses(address_label addressline
addressline city region country zipcode
is_deleted)
ON
(
current_addressesaddress_label = source_address
esaddress_label
)
WHEN NOT MATCHED THEN
INSERT (address_label addressline addressline
city region country zipcode)
VALUES (source_addressesaddress_label
source_addressesaddressline
source_addressesaddressline
source_addressescity source_addressesregion
source_addressescountry source_addresseszipcode)
WHEN MATCHED AND source_addressesis_deleted
=
THEN DELETE
WHEN MATCHED THEN
UPDATE
SET address_label=source_addressesaddress_label
addressline=source_addressesaddressline
addressline=source_addressesaddressline
city=source_addressescity region=source_address
esregion country=source_addressescountryzip
code=source_addresseszipcode
我们简单的对上述例子进行一下点评USING部分定义了新数据在这个例子中是一个表变量ON部分定义了新数据和现有数据之间的联接最后它通过一系列的MATCHED语句来进行相应操作其中包括WHEN NOT MATCHED的时候进行插入操作WHEN MATCHED的时候执行更新操作或WHEN MATCHED且符合一些其它条件的时候进行删除操作这是一个真正让你省心省力的功能其语法更干净且符合我们习惯的思维逻辑
强大的基于策略管理
好戏总要压轴我也把SQL Server 中最好的新功能之一放到了最后它就是基于策略的管理你是否有过这样的想法希望通过建立一系列的策略来控制用户可以对你的SQL Server进行什么操作?现在你能实现你的想法了你可以使用SQL Server 的策略管理功能
[] [] []