如果记录不存在,则将记录插入表中,否则使用现有记录添加新记录?

时间:2013-09-17 14:42:42

标签: sql-server tsql sql-server-2008-r2 sql-update insert-update

我选择了多行并将它们插入到另一个表中我想确保如果已经存在记录,我想更新现有行,否则只需插入新记录。

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

3 个答案:

答案 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