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

기술 자료 번역 기술 자료 번역
기술 자료: 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 on
create table test(id int, pid int, fn varchar(256), rn varchar(8))
go
declare @c int
set @c = 1
insert into test values(0, NULL, 'root', 'root')
while @c < 10
begin
   insert into test values(@c, @c-1, NULL, cast(@c as varchar(8)))
   set @c = @c + 1
end
create unique clustered index idx_c_id on test(id)
go
update test
set fn = parent.fn + '/' + test.rn
from 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     root
1           0           1        root/1
				
수정 프로그램을 적용하기 전에 얻는 결과는 여기에 있습니다.

--잘못된 결과가:
id          pid         rn       fn                                                                                                                                                                                                                                                               
----------- ----------- -------- ----
0           NULL        root     root
1           0           1        root/1
2           1           2        root/1/2
3           2           3        root/1/2/3
4           3           4        root/1/2/3/4
5           4           5        root/1/2/3/4/5
6           5           6        root/1/2/3/4/5/6
7           6           7        root/1/2/3/4/5/6/7
8           7           8        root/1/2/3/4/5/6/7/8
9           8           9        root/1/2/3/4/5/6/7/8/9

				

속성

기술 자료: 285870 - 마지막 검토: 2003년 10월 28일 화요일 - 수정: 3.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
키워드:?
kbmt kbbug kbfix KB285870 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com