SQL 2012 Merge 同步数据转换测试
2018-01-19 16:01
176 查看
简介
Merge关键字是DML关键字。在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。需要使用Merge的场景比如: 数据同步数据转换
基于源表对目标表做Insert,Update,Delete操作
测试实验
1.SourceTableuse testdb01 go CREATE TABLE SourceTable (id INT,[desc] varchar(50)) insert into dbo.SourceTable(id,[desc]) values(1,'描述1'); insert into dbo.SourceTable(id,[desc]) values(2,'描述2'); insert into dbo.SourceTable(id,[desc]) values(3,'描述3'); insert into dbo.SourceTable(id,[desc]) values(4,'描述4'); --insert into dbo.SourceTable(id,[desc]) values(5,'NEW描述5'); --insert into dbo.SourceTable(id,[desc]) values(6,'NEW描述6'); --insert into dbo.SourceTable(id,[desc]) values(7,'NEW2描述5'); --insert into dbo.SourceTable(id,[desc]) values(8,'NEW2描述6'); select * from [dbo].[SourceTable]2. TargetTable
use Workplan go /*目标库存*/ CREATE TABLE TargetTable (id INT,[desc] varchar(50)) select * from dbo.TargetTable insert into dbo.TargetTable(id,[desc]) values(1,'表1存在,在将被更新'); insert into dbo.TargetTable(id,[desc]) values(2,'表1存在,在将被更新'); insert into dbo.TargetTable(id,[desc]) values(5,'表1不存在,在将被更新'); insert into dbo.TargetTable(id,[desc]) values(7,'表1不存在,在将被更新'); -- truncate table TargetTable; select * from TargetTable3. 库数据同步测试
--1.跨库数据表同步及效验 merge into TargetTable as T using [testdb01].[dbo].[SourceTable] as S ON T.id=S.id WHEN MATCHED --当上面的ON后的 T.id=S.id 时,目标表中的1.2数据被更新 THEN UPDATE SET T.[DESC]=S.[desc] WHEN NOT MATCHED --目标表中没有的id,在原表中有,侧插入数据 THEN INSERT VALUES(S.id,S.[desc]) WHEN NOT MATCHED BY SOURCE --目标表中存在id,在原表中没有,侧插删除数据 THEN DELETE; --2.Merge语句还有一个强大的功能是通过OUTPUT子句 merge into TargetTable as T using [testdb01].[dbo].[SourceTable] as S ON T.id=S.id WHEN MATCHED --当上面的ON后的 T.id=S.id 时,目标表中的1.2数据被更新 THEN UPDATE SET T.[DESC]=S.[desc] WHEN NOT MATCHED --目标表中没有的id,在原表中有,侧插入数据 THEN INSERT VALUES(S.id,S.[desc]) WHEN NOT MATCHED BY SOURCE --目标表中存在id,在原表中没有,侧插删除数据 THEN DELETE OUTPUT $ACTION AS [ACTION], Inserted.id AS 插入的id, Inserted.[desc] as 插入的DESC, Deleted.id as 删除的id, Deleted.[DESC] AS 删除的DESC; --3.Merge语句基础上加上AND附加上额外的限制条件 merge into TargetTable as T using [testdb01].[dbo].[SourceTable] as S ON T.id=S.id WHEN MATCHED --当上面的ON后的 T.id=S.id 时,目标表中的1.2数据被更新 THEN UPDATE SET T.[DESC]=S.[desc] WHEN NOT MATCHED and S.id=3 --目标表中没有的id=3,在原表中有,侧插入数据 THEN INSERT VALUES(S.id,S.[desc]) WHEN NOT MATCHED BY SOURCE --目标表中存在id,在原表中没有,侧插删除数据 THEN DELETE OUTPUT $ACTION AS [ACTION], Inserted.id AS 插入的id, Inserted.[desc] as 插入的DESC, Deleted.id as 删除的id, Deleted.[DESC] AS 删除的DESC;
相关文章推荐
- SQL之merge into 批量更新数据 sql数据同步 基于源表对目标表做Insert,Update,Delete操作
- SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) 一条语句实现两表同步(添加、删除、修改)
- SQL 2012 发布与订阅实现数据同步 图解(解决 错误22022)
- SQL 2012 发布与订阅实现数据同步 图解(解决 错误22022)
- SQL 2012 发布与订阅实现数据同步 图解(解决 错误22022)
- SCCM 2016 + SQL 2016 + Win 2012 R2 安装教程
- Microsoft SQL Server 2008/2012 Internals 一处疑问
- sql server merge 实现 trigger t_merge_gomac_avpickmap
- 跟我一起学Microsoft SQL Server 2012 Internals(1.4)
- WPF+EntityFramework连接数据库之傻瓜闲扯蛋(VS2013+SQL 2012)
- sql2012导入到sql2005
- SQL Server 2012 (“Denali”): SQL Server Data Tools (SSDT), codename ‘Juneau”
- SQL Server6.0、6.5、7.0、SQL 2000 2005 2008 2012 2014话说版本号
- SQL SERVER 2012启动失败 because upgrade step 'SSIS_hotfix_install.sql' 失败
- 1.SqlDataAdapter操作sql2012
- 微软推出的免费新书《Introducing Microsoft SQL Server 2012》
- 【转载】Windows下彻底卸载删除SQL Serever 2012
- Slave_SQL_Running: No mysql同步故障解决方法
- Slave_SQL_Running: No mysql同步故障解决方法
- SQL Server中的Merge关键字