【问题标题】:Update if exist, else insert如果存在则更新,否则插入
【发布时间】:2014-01-13 13:57:36
【问题描述】:

我有一个包含以下列的表格:

  1. pk
  2. empID
  3. peer_empID

数据是这样的:

pk    empID    peer_empID
1      5          27
2      5          94
3      5          67

数据会这样显示给用户:

用户可以添加Peers,修改选中的Peer,也可以删除它们。最后点击保存:

  1. 已删除的 Peers 将被删除
  2. 将更新更改的 Peers
  3. 将添加已添加的 Peers

并将其存储在数据库中。

如果更改,我必须编写一个查询来更新,如果不存在则插入,如果从前端删除则删除。

我试过了:

IF not exists (select empID, peer_empID from assignPeers where empID = @empID and peer_empID = @peer_empID)

    BEGIN
        insert into assignPeers (empID, peer_empID) values (@empID, @peer_empID)
    END

ELSE
    BEGIN
        update assignPeers set peer_empID = -->here is the problem.. how will I define the condition to update? <-- 
        where empID = @empID and peer_empID = @peer_empID
    END

请建议我在这种情况下该怎么做?

【问题讨论】:

  • 这是一个很常见的场景。谷歌UPSERT 获取信息。现在大多数 RDBMS 都有这种语法。
  • 您查看过MERGE 声明吗? msdn.microsoft.com/en-us/library/bb510625.aspx
  • @SchmitzIT 我不知道。我去看看。
  • 没关系!我得到了它。但是如何知道要删除哪些行呢?还是用户更改了数据?

标签: asp.net sql stored-procedures insert


【解决方案1】:

在这种情况下,我认为您没有太多选择...您必须存储原始主键和新主键,并尝试使用 SET 和 WHERE 语句进行更新。

【讨论】:

    【解决方案2】:
    IF EXISTS (SELECT 1 FROM assignPeers WHERE empID = @empID)
    BEGIN
        UPDATE assignPeers set peer_empID =  @peer_empID
        WHERE empID = @empID 
    END
    ELSE    
        INSERT into assignPeers (empID, peer_empID) values (@empID, @peer_empID) 
    END
    

    你能试试上面的代码吗?

    【讨论】:

    • 是的,我也是这样做的
    猜你喜欢
    • 2014-10-23
    • 2013-04-19
    • 2023-03-17
    • 2010-12-10
    • 2015-07-04
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多