我选择了多行并将它们插入到另一个表中我想确保如果已经存在记录,我想更新现有行,否则只需插入新记录。
Table:
ID VALUE SOFid
3 44 5555
5 43 5555
8 88 8888
我的新记录是
INSERT INTO TABLE (6,88,5555)
INSERT INTO TABLE (1,89,5555)
INSERT INTO TABLE (5,99,5555)
INSERT INTO TABLE (8,76,5555)
如果我得到相同的ID,我怎么能继续前进?我需要为现有记录增加价值..
Proc for my query:
CREATE PROC Test
@ID INT,
@VALUE1 INT,
@@SFOid int
AS
BEGIN
IF @ID=(SELECT ID FROM Table WHERE ID= @ID AND SFOid=@SFOid)
BEGIN
UPDATE Rotation
SET value=@VALUE1+(SELECT value FROM Rotation WHERE ID=@ID AND SFOid=@SFOid)
WHERE ID=@ID AND SFOid=@SFOid
END
ELSE
INSERT INTO Table
VALUES(@ID,@VALUE1,@SFOid)
END
答案 0 :(得分:3)
尝试使用MERGE声明。
另一方面,为什么要插入身份证号码?这些通常由DB本身自动生成。
答案 1 :(得分:2)
我不确定这是否是最佳解决方案...... 但是如果你想按照你想要的方式去做..
如果记录已经存在,请扫描表格。如果是,则更新特定列或创建新列将是所有场地..
像在java中一样,你可以这样做......while(rs.next){
if(id==// your way of defination of id){
update your column using alter table...}
else
{
insert into....
}
}
很抱歉没有语法,但这个想法是预计的..
答案 2 :(得分:0)
在一个表上执行多个操作时,尝试使用Merge Statement似乎在这种情况下表现得非常好。
MERGE Table1 AS tbl1
USING(SELECT Column1,Column2,Column3,... ..FROM Table2)AS tbl2
ON tbl1.Column1 = tbl2.Column1
匹配时
更新
SET - 您正在更新的更新
当没有匹配时
INSERT INTO TableName(Column1,Column2,Column3 ......)
VALUES(Value1,Value2,Value3,......);
GO