如何在SQL Server中使用Merge语句

分类:编程技术 时间:2024-02-20 15:28 浏览:0 评论:0
0
本文与大家分享如何在SQL Server中使用Merge语句。小编觉得还是比较实用的,所以分享给大家学习一下。希望您读完本文后有所收获。话不多说,只需按照指南操作即可。我们一起来看看吧。

我们举个例子来详细解释一下:有两张表,SourceTable,是登录表,TargetTable,是授权表。如果访问用户在登录表中,则更新授权表的授权级别。否则,授权 0 表示访问者。 sql语句如下: --SourceTable为登录表,TargetTable为授权表 --如果访问用户在登录表中,则更新授权表的授权级别,否则授权0表示访客。 create table SourceTable(UserName nvarchar(10),Pwd int,[Level] int) create table TargetTable(UserName nvarchar(10),[Level] int) go --以下是新建的SQL Server2008的signment函数,更多新函数参见insert into SourceTable value('user1','111',1),('user2','222',2),('user3','333',3) insert into TargetTable values('user1', 1),('user2',2) 一般我们会写如下语句: 复制代码 代码如下:declare @UserName varchar(10) = 'user2'--表示登录用户名合并到 TargetTable 作为 tg 使用 (select UserName,[Level] from SourceTable where UserName=@UserName) as sr(UserName,[Level]) on tg.UserName=sr.UserName 当匹配时update set [Level]=sr .[Level]--与目标不匹配时更新授权级别然后插入(UserName,[Level])values(@UserName,0)--表示访问者输出$action;

执行结果为UPDATE,表示已经执行了更新操作,这正是我们想要的。但是如果我们给‘user6’赋值@UserName,我们希望向TargetTable中插入一条记录,但是实际执行结果却是空的,说明什么也没有插入被执行。原因是在 tg.UserName=sr.UserName 上的 using (select UserName,[Level] from SourceTable where UserName=@UserName) as sr(UserName,[Level]) 语句中,sr 结果集为空,因此merge 语句没有我向后执行它,但我不知道这是否是 SQL Server 的错误。下面的SQL可以解决上述问题: 复制代码 代码如下:declare @UserName varchar(10) = 'user7'--表示将登录的用户名合并到TargetTable中作为tg使用(select @UserName) as sr(UserName) on tg.UserName=sr.UserName whenmatched then update set [Level]= (select top 1 [Level] from SourceTable where UserName=@UserName) --不匹配时更新授权级别by target then insert(UserName,[Level])values(@UserName,0)--表示访问者输出$action;

以上就是如何在SQL Server中使用Merge语句。我相信有一些知识点可能是我们在日常工作中看到或使用到的东西。希望哟你可以从这篇文章中了解更多信息。更多详情请关注行业资讯频道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在SQL Server中使用Merge语句

用户评论