有表a(f1,f2,f3)
现有一条新记录(key,val1,val2),
如果表a中有字段f1为key值的记录,则更新该条记录为(key,val1,val2);
如果表a中无字段f1为key值的记录,则插入该条记录;
如何用一条语句实现?
用存储过程吧:
--创建存储过程
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)
*/
declare @num int
set @num = select count(*) from a where f1=key)
if @num>0
update.......
else
insert...........
那你就查出来判断一下呗。
delete from a where f1='f1';
insert into a(f1,f2,f3) values(key,val1,val2);
上面都有了,如果是08的话,可以用merge语法。