1

我正在选择多行并将它们插入到另一个表中我想确保如果记录已经存在我想更新现有行或者只是插入新记录。

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
4

3 回答 3

3

尝试使用MERGE语句。

另一方面,你为什么要插入身份证号码?这些通常由数据库本身自动生成。

于 2013-09-17T14:44:40.957 回答
2

我不确定这是否是最佳解决方案...但是如果您想按照自己的方式进行操作..

如果记录已存在,则扫描表。如果是,则更新特定列或创建新列将所有字段..

就像在java中你可以这样做......

while(rs.next){
if(id==// your way of defination of id){
update your column using alter table...}
else
{
insert into....
}
}

抱歉没有语法,但这个想法是预计的..

于 2013-09-17T14:46:19.530 回答
0

当您在一张表上执行多项操作时,尝试使用 Merge 语句似乎在这种情况下表现得非常好。

将表 1 合并为 tbl1

使用 (SELECT Column1, Column2, Column3, .....FROM Table2) AS tbl2

ON tbl1.Column1 = tbl2.Column1

当匹配然后

更新

SET——无论你在更新什么,你的更新

当不匹配时

插入表名(列 1、列 2、列 3……)

价值(价值1,价值2,价值3,......);

于 2013-09-22T17:21:17.500 回答