SQL Server 2005에서 자동 증가를 위해 ORDER BY 없이 ROW_NUMBER() 사용
SQL Server 2005에서 비-값 자동 증가 ROW_NUMBER()로 작업할 때 ID 열이 어려울 수 있으며 적합한 ORDER BY 기준. 그러나 대안이 있습니다:
Constant Order By 절과 함께 ROW_NUMBER() 사용:
유효한 ORDER BY 필드가 없더라도 ROW_NUMBER()는 다음과 결합될 수 있습니다. 자동 증가를 모방하는 상수 주문 절:
INSERT dbo.TargetTable (ID, FIELD) SELECT Row_Number() OVER (ORDER BY (SELECT 1)) + Coalesce( (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)), 0 ), FieldValue FROM dbo.SourceTable WHERE {somecondition};
이것은 이 방법은 ID 열의 고유성을 보장하면서 명시적인 순서를 피합니다.
주의 사항: 원래 순서가 보장되지 않음:
이 방법은 ID 열의 고유성을 보장하지 않는다는 점에 유의하는 것이 중요합니다. 원래 SourceTable 순서를 보존합니다. 외부 쿼리의 ORDER BY와 같은 다른 요소가 결과 순서에 영향을 미칠 수 있습니다.
동시성에 대한 고려 사항:
잠금 힌트(TABLOCKX 및 HOLDLOCK)가 동시 프로세스가 쿼리 실행 단계 사이에 동일한 ID를 삽입하는 것을 방지하기 위한 쿼리입니다. 그러나 이 접근 방식은 ID 열을 사용하는 것만큼 효율적이지 않으며 해결 방법으로만 고려해야 합니다.
권장 솔루션: ID 열 사용:
최적의 성능과 동시성에서는 자동 증가에 ID 열을 사용하는 것이 좋습니다.
위 내용은 ROW_NUMBER()를 사용하여 SQL Server 2005에서 비식별 열을 자동 증가시키려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!