MSSQL更新数据,某主键存在则更新,不存在则插入

例如:一个有User和Password的表希望写一个存储过程;通过传参来实现上述的功能:原来自己的方法觉得有待改进:1、使用一个存储过程查询表中是否存在User(SELE... 例如:一个有User和Password的表
希望写一个存储过程;通过传参来实现上述的功能:
原来自己的方法觉得有待改进:
1、使用一个存储过程查询表中是否存在User(SELECT);
2、存在则更新改数据(UPDATE);
3、不存在则新增一条数据,即插入一条数据(INSERT);
我用了三部分来实现此功能,我觉得SQL如此博大精深,应该有一条存储过程解决的方法,无奈水平不够;望高手指点;
展开
 我来答
badkano
推荐于2017-11-26 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885371
团长

向TA提问 私信TA
展开全部

你sqlserver什么版本?

2008以上的话可以采用meger into 来解决,不需要存储过程

Merge Into 被更新的表 p
--从数据源查找编码相同的产品
using 主表 s on p.关联字段=s.关联字段
--如果编码相同,则更新目标表的名称
When Matched Then Update set P.某字段=s.某字段
--如果目标表中不存在,则从数据源插入目标表
When Not Matched Then Insert (字段1,字段2,字段3...) values (字段1,字段2,字段3...);
追问
不好意思,可能表达不太好,可能你理解错我的意思了吧,我意思是只有一个表,表头为id,user,password; id为自增主键;然后我想要添加一个用户(user),但是我不知道该用户在这个表中是否存在,如果存在的话就更新这条数据(即把password(密码)更新了);如果user(用户)不存在的话,就插入这么一条数据。万分感谢!MSSQL2008;
追答

我写了点测试数据,你试验一下

创建表

create table [user]
(id int,
username varchar(20),
password varchar(20))
insert into [user] values (1,'aaa','aaa')

目前表里存在id=1的那条数据

这个时候我如果插入一个用户名bbb,密码bbb的,id同样为1的用户

Merge Into [user] p 
using (select 1 id,'bbb' username,'bbb' password) s on p.id=s.id --括号里那些就是你输入的东西,
When Matched Then Update set p.username=s.username,p.password=s.password
When Not Matched Then Insert (id,username,password) values (id,username,password);

然后此时,你

select * from [user]

 

然后现在插入一条id为2,用户名密码都为ccc的用户

Merge Into [user] p 
using (select 2 id,'ccc' username,'ccc' password) s on p.id=s.id
When Matched Then Update set p.username=s.username,p.password=s.password
When Not Matched Then Insert (id,username,password) values (id,username,password);

然后你再看下结果

桶桶波3
2014-01-09 · TA获得超过100个赞
知道小有建树答主
回答量:150
采纳率:0%
帮助的人:66.9万
展开全部
由于你没有给出表名,所以暂且暂且叫做userpassrd,你将表明替换成你的修正一下就可以了,代码如:下
create procedure ifuser
@user nchar(10)
@pwd nchar(10)
as begin
if(select * from userpassword where user=@user)//存在则更新
update userpassword set user=@user
else //不存在则插入
insert into userpassword values(@user,@password)
end
追问
还是谢谢了,依照上面的回答的方法解决了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式