检查ID是否存在以及另一列是否为空并更新另一列

时间:2016-11-14 15:04:56

标签: sql sql-server sql-server-2008

我即将在表上实现更新语句。我知道这听起来很简单,但我无法从逻辑上理解它。

情境:

我有一个表格,我有以下格式,每天通过一个过程获取数据。表格中的列如下:

PKID | RecordID | ThirdPartyID |行动| DATEADDED

PKID:自动增量主键。 RecordID:可以有重复项。 ThirdpartyID:可以是多个值,也接受NULLS。 操作:需要更新的列 DateAdded:包含将记录导入表格时的GETDATE()。

问题:

每天都有一个进程将新记录导入此表。当记录插入一天时,我需要检查以下内容:

  1. 检查表中是否已存在新插入的RecordID。

  2. 如果今天输入的RecordID已经存在于表中(旧记录中可能有多个相同RecordID的条目),

    • 检查该RecordID的旧记录中的ThirdPartyID是否为NULL。
    • 如果该RecordID的任何旧记录中存在ThirdPartyID,请使用“多个条目”更新操作列。
      • 别无所事。
  3. 如果我能就此提供任何进一步的澄清或细节,请告诉我。

2 个答案:

答案 0 :(得分:1)

我会像这样解决问题:

  1. 将新数据加载到Temp表中。

  2. 内部加入RecordID上的2个表,只有当两个表中都存在RecordID时才会加入...

  3. 如果ThirdPartyID字段也为空,则将Action列更新为“Multiple Entries”。

  4. 脚本应该是这样的:

    UPDATE Main
    SET Action = 'Multiple Entries'
    FROM Main INNER JOIN Temp ON Main.RecordID = Temp.RecordID
    WHERE Main.ThirdPartyID IS NOT NULL
    

答案 1 :(得分:0)

您可以通过将输出数据输出到表变量来获取插入数据的副本,然后通过连接到原始表来执行更新。 e.g:

DECLARE @inserted TABLE
(PKID           INT
,RecordID       INT
,ThirdPartyID   INT
,Action         VARCHAR(MAX)
,DateAdded      DATE);

INSERT TestTable1
(RecordID
,ThirdPartyID
,Action
,DateAdded)
    OUTPUT
     inserted.PKID
    ,inserted.RecordID
    ,inserted.ThirdPartyID
    ,inserted.Action
    ,inserted.DateAdded
    INTO @inserted
    (PKID
    ,RecordID
    ,ThirdPartyID
    ,Action
    ,DateAdded)
VALUES 
(1
,2
,NULL
,GETDATE());

UPDATE t
SET ThirdPartyID = 'Multiple Entries'
FROM @inserted i
JOIN TestTable1 t
ON i.RecordID = t.RecordID
WHERE t.ThirdPartyID IS NOT NULL;