首页 新闻 搜索 专区 学院

sql 有则修改,无则删除

0
悬赏园豆:5 [已解决问题] 解决于 2011-03-01 17:30

有表a(f1,f2,f3)

 

现有一条新记录(key,val1,val2),

如果表a中有字段f1为key值的记录,则更新该条记录为(key,val1,val2);

如果表a中无字段f1为key值的记录,则插入该条记录;

如何用一条语句实现?

水无声的主页 水无声 | 初学一级 | 园豆:92
提问于:2011-03-01 11:10
< >
分享
最佳答案
0

用存储过程吧:

--创建存储过程
Create proc a_in
@key int,
@val1 int,
@val2 int
AS
DECLARE @Temp int;
select @Temp=COUNT(*) from a where f1=@key;
--如果数据已经存在则更新
if @Temp>0
update a set f2=@val1,f3=@val2 where f1=@key;
--如果不存在则插入
else
insert into a(f1,f2,f3) values(@key,@val1,@val2);
GO

--调用存储过程
exec a_in 1,2,3;
exec a_in 2,3,4;
exec a_in 1,5,6;
select * from a;
--结果
/*

(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
f1 f2 f3
----------- ----------- -----------
1 5 6
2 3 4
(2 row(s) affected)
*/

收获园豆:5
artwl | 专家六级 |园豆:16536 | 2011-03-01 13:26
其他回答(4)
0

declare @num int
set @num = select count(*) from a where f1=key)
if @num>0
    update.......
else
  insert...........

soarfe | 园豆:146 (初学一级) | 2011-03-01 13:28
0

那你就查出来判断一下呗。

顾晓北 | 园豆:10819 (专家六级) | 2011-03-01 14:46
0

delete from a where f1='f1';

insert into a(f1,f2,f3) values(key,val1,val2);

寻自己 | 园豆:285 (菜鸟二级) | 2011-03-01 17:25
0

上面都有了,如果是08的话,可以用merge语法。

清海扬波 | 园豆:793 (小虾三级) | 2011-03-02 11:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册