FIX: 자체 조인 프로그램 업데이트 행 중 잘못된 번호 업데이트할 수 있다

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

285870
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
# 버그: 101111 (sqlbug_70)
# BUG: 351761 (SHILOH_bugs)
현상
UPDATE 작업이 다음 조건이 충족될 경우 올바른 개수의 행 수정할 수 있습니다.
  • 쿼리에 열을, ColA, TabA 테이블에서 업데이트합니다.
  • 쿼리 TabA를 다시 TabB 별칭을 사용하여 참조합니다.
  • 쿼리에서 어딘가에 TabB.ColA에 대한 참조가 있습니다.
  • TabA 있는 업데이트 중인 열의 인덱싱된 열이 없습니다.
  • 해시 또는 병합 조인이 사용됩니다.
원인
쿼리 계획을 파티 보호를 제공하기 위해 필요한 UPDATE 연산자 아래에 필요한 테이블 스풀 포함되어 있지 않을 수 있습니다.
해결 방법

SQL Server 2000

이 문제를 해결하려면 Microsoft SQL Server 2000의 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
290211INF: SQL Server 2000의 최신 서비스 팩을 구하는 방법

SQL Server 7.0

이 문제를 해결하려면 Microsoft SQL Server 7.0 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
301511INF: SQL Server 7.0 최신 서비스 팩을 구하는 방법


참고: 다음 이 핫픽스 전에 Microsoft SQL Server 7.0 서비스 팩 4 만들어졌습니다.

이 수정의 영어 버전은 다음 파일 특성을 가집니다 또는 나중에:
   Version      File name       Platform   -------------------------------------   7.00.978     s70978i.exe     x86   7.00.978     s70978a.exe     Alpha				
참고: 파일 종속성으로 인해 최신 핫픽스 또는 위의 파일이 들어 기능에 추가 파일이 포함될 수도 있습니다.
해결 과정
이 문제를 해결하려면 다음을 수행합니다.
  • 루프 조인 (LOOP JOIN) OPTION 사용하여 강제로.

    - 또는 -

  • 인덱스에 대한 업데이트된 열을 추가하십시오.
현재 상태
Microsoft 문제는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다.

SQL Server 2000
이 문제는 SQL Server 2000 서비스 팩 1에서 처음 수정되었습니다.

SQL Server 7.0
이 문제는 Microsoft SQL Server 7.0 서비스 팩 4 수정되었습니다.
추가 정보
파티 보호 위치를 인해 UPDATE 작업이 테이블 내에서 행 실제 위치를 변경하는 상황을 방지하는 데 필요합니다. 따라서 같은 행의 여러 번 컨텍스트 내에서 발생하지 않는 단일 논리 작업 revisited 수 있습니다. 이 특정 버그에 대한 조건이 충족될 경우 SQL Server 최적화 프로그램은 적절한 파티 보호 계획과 작성할 수 없습니다.

다음 예제에서는 문제를 보여 줍니다.
set nocount oncreate table test(id int, pid int, fn varchar(256), rn varchar(8))godeclare @c intset @c = 1insert into test values(0, NULL, 'root', 'root')while @c < 10begin   insert into test values(@c, @c-1, NULL, cast(@c as varchar(8)))   set @c = @c + 1endcreate unique clustered index idx_c_id on test(id)goupdate testset fn = parent.fn + '/' + test.rnfrom test(index=0) , test parent(index=0)where test.pid = parent.id and test.fn is NULL --  and parent.fn <> ''option(hash join,force order)				
여기에 있는 테이블의 올바른 내용을 업데이트한 후:

--올바른 결과를:
id          pid         rn       fn                                                                                                                                                                                                                                                               ----------- ----------- -------- ---- 0           NULL        root     root1           0           1        root/1				
수정 프로그램을 적용하기 전에 얻는 결과는 여기에 있습니다.

--잘못된 결과가:
id          pid         rn       fn                                                                                                                                                                                                                                                               ----------- ----------- -------- ----0           NULL        root     root1           0           1        root/12           1           2        root/1/23           2           3        root/1/2/34           3           4        root/1/2/3/45           4           5        root/1/2/3/4/56           5           6        root/1/2/3/4/5/67           6           7        root/1/2/3/4/5/6/78           7           8        root/1/2/3/4/5/6/7/89           8           9        root/1/2/3/4/5/6/7/8/9				

경고: 이 문서는 자동 번역되었습니다

속성

문서 ID: 285870 - 마지막 검토: 01/16/2015 21:26:00 - 수정: 3.1

  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • kbnosurvey kbarchive kbmt kbbug kbfix KB285870 KbMtko
피드백