ORDER BY 없이 ROW_NUMBER()를 사용하여 데이터 자동 증가
ID 열 없이 테이블에 데이터를 삽입할 때 다음이 필요합니다. 기본 키를 자동 증가시키는 대체 방법을 찾으세요. 일반적으로 사용되는 접근 방식 중 하나는 행의 순차적 번호 지정을 허용하는 ROW_NUMBER() 함수입니다.
일반적으로 ROW_NUMBER() 함수에는 행 순서를 결정하기 위해 ORDER BY 절이 필요합니다. 그러나 합법적인 주문 필드를 사용할 수 없는 시나리오가 있습니다. 이 문제를 해결하기 위해 (SELECT 1)과 같이 ORDER BY 절에 임의의 상수 표현식을 사용하는 해결 방법이 있습니다.
이 기술을 OVER() 절과 결합하면 다음을 계산할 수 있습니다. 특정 순서를 지정하지 않고 각 행의 행 번호:
Row_Number() OVER (ORDER BY (SELECT 1))
그런 다음 이 표현식을 INSERT 문에서 사용하여 기본 순서를 자동 증가시킬 수 있습니다. key:
INSERT INTO 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};
그러나 이 해결 방법은 SourceTable의 원래 행 순서 보존을 보장하지 않는다는 점에 유의하는 것이 중요합니다. 실제로 결과의 최종 순서에 영향을 미치는 다른 요소가 있을 수 있습니다. 이는 "(특정 방식으로) 정렬되지 않음"이라는 개념이 "원래 순서 유지"와 다르기 때문입니다.
따라서 기본 키 자동 증가에 ID 열을 사용하는 것이 일반적으로 ROW_NUMBER( ) 해결 방법. 복잡한 계산이 필요하지 않을 뿐만 아니라 각 행에 고유하고 충돌하지 않는 ID가 있는지 확인하여 동시성과 데이터 무결성을 향상시킵니다.
위 내용은 ROW_NUMBER()를 사용하여 ID 열 없이 데이터를 자동 증가시키려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!