我即将在表上实现更新语句。我知道这听起来很简单,但我无法从逻辑上理解它。
情境:
我有一个表格,我有以下格式,每天通过一个过程获取数据。表格中的列如下:
PKID | RecordID | ThirdPartyID |行动| DATEADDED
PKID:自动增量主键。 RecordID:可以有重复项。 ThirdpartyID:可以是多个值,也接受NULLS。 操作:需要更新的列 DateAdded:包含将记录导入表格时的GETDATE()。
问题:
每天都有一个进程将新记录导入此表。当记录插入一天时,我需要检查以下内容:
检查表中是否已存在新插入的RecordID。
如果今天输入的RecordID已经存在于表中(旧记录中可能有多个相同RecordID的条目),
如果我能就此提供任何进一步的澄清或细节,请告诉我。
答案 0 :(得分:1)
我会像这样解决问题:
将新数据加载到Temp表中。
内部加入RecordID上的2个表,只有当两个表中都存在RecordID时才会加入...
如果ThirdPartyID字段也为空,则将Action列更新为“Multiple Entries”。
脚本应该是这样的:
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;