2009-09-27 2 views
1

내 ticketNumber를 제공하는 ID 열이있는 테이블이 있습니다.SQL Server에 부분적 Identity 열을 포함 할 수 있습니까?

다른 표에서 ticketStepNumber를 제공하고 싶습니다. 티켓에는 0 개 이상의 단계가있을 수 있으므로 항상 ticketStepNumber를 작성하지는 않습니다.

ticketStepNumber 값은 ticketNumber 열 (int)과 stepNumber 열 (int)의 조합입니다. stepNumber 열을 ID와 같이 정의하고 싶지만 ticketNumber 열의 각 값에 대해 1부터 시작합니다. 따라서 저장된 프로 시저에서 수행해야하는 모든 작업은 ticketNumber에서 전달되며 새 stepNumber를 얻습니다. 예 :

ticketNumber stepNumber 
1    1 
2    1 
2    2 
2    3 
4    1 
7    1 
7    2 

테이블 정의에서이를 정의하는 방법이 있습니까, 아니면 SP에서해야합니까?

답변

1

아니요, SQL Server에는 그런 것이 없습니다. 죄송합니다. IDENTITY 열은 계속 증가하는 단일 열입니다. 다른 열의 값을 기준으로하는 것은 아닙니다.

각 단계마다 순차적 번호가 있어야하는 경우 할당을 처리해야합니다 (실제로 고유한지 확인해야합니다).

업데이트 : 테이블에 정렬 식으로 사용할 수있는 다른 열이있는 경우 ROW_NUMBER 함수를 사용하여 원하는 것을 얻을 수 있습니다. 예 :

SELECT 
    TicketNUmber, 
    ROW_NUMBER() OVER (PARTITION BY TicketNumber ORDER BY TicketDate) AS StepNumber 
FROM YourTable 

이 "파티션"TicketNumber하여 데이터 (예 : 파티션의 값의 각각에 대해 1에서 계산 시작) 및 다음 사용합니다 : 당신이 TicketDate (DATETIME) 열이 있다면, 당신은 뭔가를 할 수 순서대로 TicketDate을 기준으로 ROW_NUMBER에서 행 번호를 순차적으로 지정합니다.

마크

+0

감사합니다. 나는 많이 추측하지만 너는 결코 알지 못한다. 각각의 새로운 릴리스는 새로운 것을 추가하는 것처럼 보입니다. 그렇지 않습니다. – serialhobbyist

1

이것은 당신의 SP에 추가하는 쉬운 단계 : 당연히

SELECT (MAX(stepNumber) + 1) AS @StepNumber FROM [TableName] WHERE ticketNumber = @ticketNumber 

당신은 다른 선언을 모두 추가해야합니다, 그리고 동시성의 몇 가지 유형이 하나 이상의 경우 확인 사람은 동시에 같은 ticketNumber에서 작업 할 수 있습니다.

관련 문제