MSSQL更新数据,某主键存在则更新,不存在则插入
例如:一个有User和Password的表希望写一个存储过程;通过传参来实现上述的功能:原来自己的方法觉得有待改进:1、使用一个存储过程查询表中是否存在User(SELE...
例如:一个有User和Password的表
希望写一个存储过程;通过传参来实现上述的功能:
原来自己的方法觉得有待改进:
1、使用一个存储过程查询表中是否存在User(SELECT);
2、存在则更新改数据(UPDATE);
3、不存在则新增一条数据,即插入一条数据(INSERT);
我用了三部分来实现此功能,我觉得SQL如此博大精深,应该有一条存储过程解决的方法,无奈水平不够;望高手指点; 展开
希望写一个存储过程;通过传参来实现上述的功能:
原来自己的方法觉得有待改进:
1、使用一个存储过程查询表中是否存在User(SELECT);
2、存在则更新改数据(UPDATE);
3、不存在则新增一条数据,即插入一条数据(INSERT);
我用了三部分来实现此功能,我觉得SQL如此博大精深,应该有一条存储过程解决的方法,无奈水平不够;望高手指点; 展开
2个回答
展开全部
你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);
然后你再看下结果
展开全部
由于你没有给出表名,所以暂且暂且叫做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
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
追问
还是谢谢了,依照上面的回答的方法解决了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |