求解各位大神,这个如何实现呢? 百度了很多,没有找到一个合适的,所以就来求教了 ------解决方案-------------------- 很简单的一招,SQL如下: update xxx set a=1,b=2,... if @@ROWCOUNT=0 insert xxx ------解决方案-------------------- sql server 2008 可以用merge语句试试用 ------解决方案-------------------- 也可以在表上建个instead of 触发器 ------解决方案--------------------
也可以考虑下存储过程,以主键作为参数 create proc proc_chk_infor(@pk)_id int) as declare @count int select @count=count(*) from table_name where pk_id=@pk_id if @count>0 update table_name set column_name_1=new_value,...column_name_n=new_value where pk_id=@pk_id else insert into table_name values(column_values) --如果列不多,列值可以考虑作参数
------解决方案-------------------- 可以使用merge into 相当于 if exists(...) update table else insert into table
它的基本语法: MERGE 目标表 USING 源表 ON 匹配条件 WHEN MATCHED THEN 跟新语句 WHEN NOT MATCHED THEN 删除语句 ------解决方案-------------------- if exists(select 1 from tb where 主键=插入的数据主键列) begin delete from tb where 主键=插入的数据主键列 end insert into tb (col1,col2..) values (val1,val2..) 简单来说,就是先判断插入的数据是否存在主键相同的数据,有就删除。然后再进行插入,不用去更新了
------解决方案-------------------- 如果源表和目标表的数据结构一致,并且没有计算列的话,可以直接insert into Tb1 select * from tb2 where xxx=xxx update 语句的话,只能老老实实地把每个列写出来
if exists(select 1 from tb where 主键=插入的数据主键列) begin delete from tb where 主键=插入的数据主键列 end insert into tb (col1,col2..) values (val1,val2..) 简单来说,就是先判断插入的数据是否存在主键相同的数据,有就删除。然后再进行插入,不用去更新了
感谢上面的各位
也可以考虑下存储过程,以主键作为参数 create proc proc_chk_infor(@pk)_id int) as declare @count int select @count=count(*) from table_name where pk_id=@pk_id if @count>0 update table_name set column_name_1=new_value,...column_name_n=new_value where pk_id=@pk_id else insert into table_name values(column_values) --如果列不多,列值可以考虑作参数