2017-02-03 1 views
0

요구 사항은 더미 기본 키처럼 사용되는 저장 프로 시저에서 처리 된 각 행에 대해 고유 한 값을 반환하는 것입니다. 한 솔루션은 ROW_NUMBER() 함수를 사용하는 것 같습니다. 또 하나는 here입니다. 아마도 Guid와 관련된 솔루션이있을 수 있습니다. 누군가가 나를 performant하고 신뢰할 수있는 솔루션을 추천 수 있습니까? (당신이 독특한을 지정할로)SQL Server : 각 행에 대해 고유 한 생성 값 반환

+0

여기를 참고하십시오 : http://stackoverflow.com/questions/17839420/generate-guid-for-every-row-in-a-column – swe

+0

대답은 저장 프로 시저를 사용할 계획에 따라 다릅니다 . –

+0

SP에서 무슨 일이 일어나고 있으며 어떻게 가치를 반환합니까? 예를 들어 SP 끝에서 select 문을 사용하는 경우 한 가지 방법을 사용할 수 있습니다. 출력 매개 변수를 통해 테이블 ​​변수를 반환하는 경우 다른 방법을 사용할 수 있습니다. –

답변

0
  • 임의의 숫자는 옵션이 될 수 없다.

  • ROW_NUMBER은 행 당 8 바이트의 저장 공간을 차지합니다.

  • uniqueidentifier는 16 바이트 구조 (NEWSEQUENTIALID()은 시드 GUID에서 증가하므로 NEWID() 느린보다 NEWSEQUENTIALID() 인으로, SQL의 고유 식별자 GUID가있다)는 단순히 증가하는 ROW_NUMBER보다 얻는 것이 더 비용이 많이 든다.

  • 테이블 변수 또는 임시 테이블에 INSERT이있는 시나리오에서는 IDENTITY을 사용할 수 있습니다. 저장소 크기는 열 유형의 정수이며 정수 유형 (비트가없고 소수가 아님) 일 수 있습니다. 구성 가능한 단계 (기본값 1)에서 구성 가능한 오프셋 (기본값 1)에서 증가합니다.

이 그것은 빠르고 신뢰할 수있는 양이며, ROW_NUMBER 당신의 가장 적합 할 것으로 보인다.

나는 단지 성능 이상으로 디자인을 선택하는 것을 권장합니다. 합리적으로 구성된 SQL 서버 설치에서는 속도면에서 차이가 거의 없으며 리소스가 매우 제한되어 있지 않으면 저장소에 병목 현상이 없어야합니다. 다소 오래 된 것 benchmarks here.

반환 된 행의 특정 순서를 유지 관리하거나 보장하는 데 도움이되지 않는다는 것을 알아 두십시오. 결과가 필요할 경우 ORDER BY 너의 가장 바깥 쪽 SELECT이 필요합니다.

관련 문제