我試圖建立一個查詢只返回非重複記錄,這樣我可以把它們添加到我的數據庫,但我不斷收到此錯誤:如何制定T-SQL以避免主鍵約束?
Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK_j5c_MasterMeasures'.
Cannot insert duplicate key in object 'dbo.j5c_MasterMeasures'.
The statement has been terminated.
這是我用我的最新查詢:
CREATE TABLE #GOOD_RECORDS3 (STUDENTID VARCHAR(50), MEASUREDATE SMALLDATETIME,
measurename VARCHAR(100), LabelName VARCHAR(100), score_10 VARCHAR(100))
INSERT INTO #GOOD_RECORDS3
select A.studentid, A.measuredate, B.measurename, B.LabelName, A.score_10
from [J5C_Measures_Sys] A join [J5C_ListBoxMeasures_Sys] B on
A.MeasureID = B.MeasureID
where score_10 is not null and score_10 <> '0'
except
select A.studentid, A.measuredate, B.measurename, B.LabelName, A.score_10
from [J5C_Measures_Sys] A join [J5C_ListBoxMeasures_Sys] B on
A.MeasureID = B.MeasureID
where score_10 is not null and score_10 <> '0'
GROUP BY A.studentid, A.measuredate, B.measurename, B.LabelName, A.score_10
having COUNT(A.score_10) > 1
delete #GOOD_RECORDS3
from #GOOD_RECORDS3 a
join sysobjects so on so.name = 'J5C_Measures_Sys' AND so.type = 'u'
join syscolumns sc on so.id = sc.id and sc.name = 'score_10'
join [J5C_MeasureNamesV2_Sys] v on v.Score_field_id = sc.name
WHERE A.SCORE_10 IS NOT NULL AND A.STUDENTID IS NOT NULL AND
A.MEASUREID IS NOT NULL
and exists (select 1 from J5C_MasterMeasures M
where M.StudentID = A.StudentID
and M.MeasureID = A.MeasureID)
Insert into J5C_MasterMeasures (studentid, measuredate, measureid, nce)
select A.studentid, A.measuredate, a.MEASUREID, A.score_10
from #GOOD_RECORDS3 a
join sysobjects so on so.name = 'J5C_Measures_Sys' AND so.type = 'u'
join syscolumns sc on so.id = sc.id and sc.name = 'score_10'
join [J5C_MeasureNamesV2_Sys] v on v.Score_field_id = sc.name
WHERE A.SCORE_10 IS NOT NULL AND A.STUDENTID IS NOT NULL AND
A.MEASUREID IS NOT NULL
關於這個混淆的部分是從M5C_Measures_Sys = B.measurename + ' ' + B.Labelname
該MeasureId。這是一些示例數據從#GOOD_RECORDS3
:
1 2006-03-01 00:00:00 ISAT Reading ISAT Reading 564
10005 2003-11-17 00:00:00 TerraNova Reading TerraNova Reading 19
10005 2003-11-17 00:00:00 TerraNova Science TerraNova Science 26
10005 2003-11-17 00:00:00 TerraNova Total Battery TerraNova Total Battery 22
10005 2003-11-17 00:00:00 TerraNova Total Language TerraNova Total Language 43
所以你可以看到,b.measurename = b.labelname
。上面的錯誤發生在插入。
結果低於你的答案查詢:
1 2006-03-01 00:00:00 ISAT Reading ISAT Reading 564
10005 2003-11-17 00:00:00 TerraNova Reading TerraNova Reading 19
10005 2003-11-17 00:00:00 TerraNova Science TerraNova Science 26
10005 2003-11-17 00:00:00 TerraNova Total Battery TerraNova Total Battery 22
10005 2003-11-17 00:00:00 TerraNova Total Language TerraNova Total Language 43
有點困惑什麼是主鍵? – u07ch 2010-08-24 15:32:37
是記錄確切的重複,或者它只是在PK領域的價值是相似的 – zeocrash 2010-08-24 15:33:25