SQL Server中Merge-using的用法

在执行之前:

merge into UserInfo u using chartinfo c on u.UserId=c.UserId when matched and u.UserName=c.UserName then update set u.lastUpdate=c.LastUpdate when not matched --为not matched时不能为update(没有匹配成功 当然不能update了) then insert (UserName,Sex)values(‘ZhangZhao‘,‘b‘);

执行之后


Merge和using搭配用于特别是BI上数据统计和分析上 比如要求子表中没有的数据那么父表中就要删除对应的数据 保证子表和父表的数据对应 如果按照常规的做法是 跑个作业然后通过游标/表值函数/临时表等等循环的获取数据然后更新父表 这样是很浪费效率的 这时Merge派上用场了

时间: 2024-10-16 01:05:03

SQL Server中Merge-using的用法的相关文章

SQL Server中except和intersect用法

except是A集合减去B集合的结果:intersect是A集合和B集合的交集:都是返回的是非重复值,很多属性都和union类似. 还是以student为例 select * from student; select * into student1 from student; go insert into student1 values('aaa',20,'Js'),('bbb',30,'js'),('ccc',40,'sh'); go insert into student1 values('

SQL Server中COALESCE函数的用法

在SQL Server中COALESCE函数,会返回其参数中第一个不为NULL的参数,效果如下: SELECT COALESCE(NULL,NULL,N'A',NULL,NULL) 结果: SELECT COALESCE(NULL,NULL,N'A',N'B',N'C',NULL) 结果: 使用COALESCE函数时要注意,其参数必须是相同的类型,例如下面的例子中COALESCE函数的参数中,既有字符串类型又有数字类型,就会报错: SELECT COALESCE(NULL,NULL,N'A',N

SQL Server 中Merge 的使用

很多人都知道ORACLE中有Merge關鍵字,其實SQL Server從2008版本開始也支持Merge了. 從而也可以像ORACLE一樣在一條SQL語句中同時進行Update.Insert.Delete操作. 下面來一個簡單的例子,直接上代碼了, 數量準備: IF OBJECT_ID('TestA','U') IS NOT NULL DROP TABLE TestA GO IF OBJECT_ID('TestB','U') IS NOT NULL DROP TABLE TestB GO CRE

sql server中的charindex函数用法解析(在一段字符中搜索字符或者字符串-----返回expression1在expression2出现的位置;反之,返回0)

https://blog.csdn.net/xinghuo0007/article/details/70651358 知识点一:charindex()语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 解析: expression1 必需 ---要查找的子字符串 expression2 必需 ---父字符串 start_location 可选 ---指定从父字符串开始查找的位置,默认位置从1开始 知识点二: charin

SQL Server 中 RAISERROR 的用法(转)

在存储过程中进程会处理一些逻辑性的错误,如:将RMB转换为USD时,没有查询到想要的汇率 这个时候最好在存储过程中抛个异常,方便自己查找错误信息... 其语法如下: RAISERROR ( { msg_id | msg_str | @local_variable }                    { ,severity ,state }                    [ ,argument [ ,...n ] ]           )          [ WITH optio

SQL Server 中关于EXCEPT和INTERSECT的用法

熟练使用SQL Server中的各种用法会给查询带来很多方便.今天就介绍一下EXCEPT和INTERSECT.注意此语法仅在SQL Server 2005及以上版本支持. EXCEPT是指在第一个集合中存在,但是不存在于第二个集合中的数据. INTERSECT是指在两个集合中都存在的数据. 之间的优先级是EXCEPT  低于INTERSECT SQL Server 中关于EXCEPT和INTERSECT的用法,布布扣,bubuko.com

SQL Server中【case...end】的用法

在SQL Server中 case...end 语句,一般有如下两种用法: 1.相当于C#中if...else,例: 1 select CName,头衔=case 2 when CLevel='A1' then '初级程序员' 3 when CLevel='A2' then '中级程序员' 4 when CLevel='A3' then '高级程序员' 5 else '骨灰级大师' 6 end 7 from Coder 这种写法可以用来做区间或等值的判断. 2.相当于C#中的switch...c

Sql server的Merge语句,源表中如果有重复数据会导致执行报错

用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说明这个问题. 现在我们有一张表叫T_Class_A,其建表语句如下: CREATE TABLE [dbo].[T_Class_A]( [ID] [int] IDENTITY(1,1) NOT NULL, [ClassName] [nvarchar](50) NULL, [StudentTotalCo

SQL Server中@@ROWCOUNT的用法

SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型. 如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG. @@ROWCOUNT和@@ERROR变量的值,在执行完一条语句后总是会发生变化,所以我们将他们作为判断的依据的时候应该首先保存在局部变量中.他们反映的都是紧接着的上一条语句对他们的影响! 我们通常可以通过update.insert语句并使用@@ROWCOUNT来检测是否更改了任何一些行. 下面介绍一个使用@@ROWCOUNT的实例: S

SQL Server中的锁类型及用法

一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读 A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致 不可重复读 A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致 并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些