SELECT 또는 INSERT 함께 사용할 때 IDENTITY 함수의 동작 ORDER BY 절이 있는 SELECT 쿼리

기술 자료 번역 기술 자료 번역
기술 자료: 273586 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

IDENTITY 함수 및 ORDER BY 절이 있는 SELECT 쿼리를 사용할 때 생성되는 ID 값이 ORDER BY 절에 제공된 순서와 같은 순서로 갖도록 보장되지 않습니다. 예를 들어, IDENTITY 함수를 1 시드 및 1 증가 시작되면 순서가 지정된 결과 집합의 첫 번째 행 1 이외의 다른 값을 가질 수 및 두 번째 행의 값이 2 보다 다른 있을 수 있으며 예상대로 forth.While 경우 순서는 나타날 수 있도록 동작이 보장되지 않습니다. TOP 또는 SET ROWCOUNT 수도 있는 행 순서를 보증하지 않습니다.

ORDER BY 절에서 순서를 따르는 순차적인 방식으로 할당된 IDENTITY 값을 원하는 경우 IDENTITY 속성 사용하여 열이 포함되고 INSERT 실행하여 테이블을 만듭니다. 이 테이블을 채울 … ORDER BY 쿼리의 SELECT.

추가 정보

생성된 ID 값을 최적화 변경, 병렬 쿼리 계획 또는 TOP/SET ROWCOUNT 인해 변경될 수 쿼리 트리 (실행 계획), GetIdentity() 함수 위치에 따라 달라집니다. 시나리오 값에 있는 SELECT INTO IDENTITY 함수 및 ORDER BY 절을 생성할 확인할 수 있지만 이 동작을 원하는 순서대로 보장되지 않습니다 및 경고 없이 변경될 수 있습니다. 다음 시나리오 SELECT 문 및 IDENTITY 함수가 포함됩니다.

OldTable 다음 값으로 명명된 테이블을 고려해야 합니다.
Col1      Col2
-------   --------
1         A          
11        F 
7         G          
17        I          
2         Z          

시나리오 1

이 시나리오에서는 SELECT 쿼리를 IDENTITY 함수를 사용하여 ORDER BY 절을. 사용하며
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO 	NewTable
FROM 	OldTable
Order By Col1
NewTable 다음 중 한 행이 있는 두 가지 방법으로 삽입할 수 있습니다.

방법 1

Col1      Col2       ID
-------   --------   --------
1         A          4
2         Z          2
7         G          5
11        F          3
17        I          1
SQL Server 생성합니다 IDENTITY 값을 Col1 ORDER BY 열 순서와 쿼리에서 있지 않은지 확인할 수 있습니다.

방법 2

Col1     Col2       ID
-------  --------   -------
1        A          1
2        Z          2
7        G          3
11       F          4
17       I          5
이 경우 해당 IDENTITY 해당 SQL 값이 나타날 Server 생성합니다 ORDER BY 열 Col1 쿼리에서 같은 순서로 중입니다. 그러나, 이 coincidental 있고 쿼리가 실행될 때마다 받이 보장된 순서가 아닙니다.

시나리오 2

TOP 연산자 또는 SET ROWCOUNT 문을. 함께 IDENTITY 함수 및 ORDER BY 절, 다음 SELECT 쿼리를 사용하여
SELECT TOP 3 Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
- 또는 -
SET ROWCOUNT 3
SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
NewTable 다음 중 한 행이 있는 세 가지 방법으로 삽입할 수 있습니다.

방법 1

Col1   Col2   ID
-----  -----  -----
1      A      2
2      Z      1
7      G      3
이 경우 SQL Server 생성합니다 IDENTITY 값을 Col1 ORDER BY 열 순서와 쿼리에 있는지 볼 수 있습니다.

방법 2

Col1    Col2     ID
------  ------   ------
1       A        1
2       Z        2
7       G        3
이 경우 해당 IDENTITY 해당 SQL 값이 나타날 Server 생성합니다 ORDER BY 열 Col1 쿼리에서 같은 순서로 중입니다. 그러나, 이 coincidental 있고 쿼리가 실행될 때마다 받이 보장된 순서가 아닙니다.

방법 3

Col1   Col2    ID
------ ------  ------
1      A       4
2      Z       2
7      G       5
이 경우 SQL Server 생성합니다 IDENTITY 값을 ORDER BY 열 Col1 쿼리에서 순서가 아닙니다. 또한 삽입된 데이터 IDENTITY 함수를 쿼리에 지정된 시드와 증분 요구 사항에 맞지 않습니다 (SEED = 1, 증가 = 1).

실제로, IDENTITY 함수를 제대로 시드와 증분 매개 변수를 기반으로 ID 값을 생성합니다. 그러나 ID를 값을 생성 행은 ORDER BY 절에 따라 정렬된 전에 발생합니다. 따라서 TOP 연산자 또는 SET ROWCOUNT 사용할 때 잘못된 ID 값이 있어야 문이 결과 테이블 (NewTable) 에 삽입된 행에 것 같습니다. SQL Server 생성합니다 ID 값을 IDENTITY 함수의 시드와 증분 매개 일치하지 않을 수 있습니다.

여기에 있는 INSERT INTO SELECT FROM 절이 있는 관련된에 대한 예입니다.

OldTable 다음 값으로 명명된 테이블을 고려하십시오.
Col1      Col2
-------   --------
1         S          
11        F 
7         G          
17        I
2         z


NewTable 대상 테이블의 이름이 아래 (ID가 ID 열입니다.)
ID (identity)    Col1     Col2
---------------    -------   ------


NewTable ID Col1 순서대로 해당 열이 ORDER BY 절 사용하여 다음과 같은 INSERT INTO SELECT FROM 쿼리가 보장합니다.
INSERT INTO NewTable (Col1, Col2) SELECT Col1, Col2 FROM OldTable ORDER BY Col1 
ID (identity)    Col1     Col2
-------------    ------   ------
1                1         S
2                2         z
3                7         G
4                11        F
5                17        I

참고 ID ID 열은 Col1 같이 같은 순서를 생성됩니다. 그러나 INSERT INTO ID 또는 NewTable 있는 Col1 실제 순서는 해서 doesn’t. 원하는 순서대로 데이터를 검색하기 위해 ORDER BY 절이 SELECT 문을 다음과 같이 필요합니다:
SELECT * from NewTable ORDER BY ID

속성

기술 자료: 273586 - 마지막 검토: 2007년 11월 2일 금요일 - 수정: 4.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
키워드:?
kbmt kbhowto kbinfo kbpending KB273586 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