【发布时间】:2018-09-30 10:45:43
【问题描述】:
我正在尝试将 2 个表中的记录插入到另一个表中,其中 AppID 在我要插入的表中尚不存在。
我已经尝试了下面的两个插入语句;但是,我不断收到错误消息:
“消息 2627,第 14 级,状态 1,第 1 行
违反主键约束“PK_tblHQTRR_BusiRisk_AppID”。无法在对象“dbo.tblHQTRR_BusiRisk”中插入重复键。重复键值为 (APPID-49348)。
声明已终止。”
我的插入语句有什么问题?
插入我尝试过的语句:
INSERT INTO tblHQTRR_BusiRisk(AppID,AppName,Tier,QTRR,BusiRisk)
SELECT A.AppID, A.AppName, A.TierLevel, A.QTRR, R.BusiRisk
FROM tblApplication A INNER JOIN tblProject P ON A.AppID=P.AppID1 INNER JOIN tblRisk R ON P.ProjID=R.ProjID
WHERE A.AppID NOT IN (SELECT H.AppID FROM tblHQTRR_BusiRisk H) And P.AppID1 NOT IN (SELECT H.AppID FROM tblHQTRR_BusiRisk H)
And A.AppName IS NOT NULL And R.BusiRisk IS NOT NULL;
INSERT INTO tblHQTRR_BusiRisk(AppID,AppName,Tier,QTRR,BusiRisk)
SELECT A.AppID, A.AppName, A.TierLevel, A.QTRR, R.BusiRisk
FROM tblApplication A INNER JOIN tblProject P ON A.AppID=P.AppID1 INNER JOIN tblRisk R ON P.ProjID=R.ProjID LEFT JOIN tblHQTRR_BusiRisk H ON H.AppID=A.AppID And H.AppName=A.AppName And H.Tier=A.TierLevel And H.QTRR=A.QTRR And H.BusiRisk=R.BusiRisk
WHERE H.AppID IS NULL;
【问题讨论】:
-
您正在尝试插入一条 AppID 已在表中的记录。 AppID 是唯一的,因此它只能在表中出现一次。该错误告诉您您尝试输入两次哪个 ID - (APPID-49348)。这可能表示查询中存在问题。
-
你只是想打破你在桌子上制定的规则:)
-
奇怪的是,错误消息中引用的 APPID-49348 实际上不在 tblHQTRR_BusiRisk 中。我尝试了下面提到的 Not Exists 方法 Wyatt Shipman,但它仍然给我同样的错误信息。
标签: sql-server insert-into not-exists notin