중복되지 않은 레코드를 반환하여 데이터베이스에 추가 할 수 있도록 쿼리를 개발하려고하지만 중복 레코드 오류가 계속 발생합니다.중복을 제외하도록 T-SQL을 공식화하는 방법은 무엇입니까?
해결책을 시도했지만 여전히 중복 오류가 발생합니다. 중복 된 35 개의 행을 삭제했습니다. 그 밖의 무엇이 이것을 일으킬 수 있습니까? 여기 내 쿼리입니다. 제 생각에 혼동의 일부는 measureid가 j5c_MasterMeasures의 단일 열이지만이 값은 j5c_ListBoxMeasures_Sys의 두 필드에서 비롯된 것입니다.
CREATE TABLE #GOOD_RECORDS3 (STUDENTID VARCHAR(50), MEASUREDATE SMALLDATETIME, MEASUREID 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
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
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
고마워요, 토마스. 그러나이 쿼리를 실행하면 0 개의 레코드가 반환됩니다. 첫 번째 3 열만 기본 키를 구성하기 때문일 수 있습니다. 예, SS 2008을 사용하고 있습니다. J5C_MeasureNamesV2_Sys는 내 조회 테이블이지만 특히이 질문과 관련이 없습니다. – salvationishere
설명을 업데이트했습니다. 너는 그것을 볼 수 있니? – salvationishere