2010-07-15 8 views
5

SQL Server 2005/2008의 기본 키를 CurrentYear + auto-increment과 같은 형식으로 만들려면 어떻게해야합니까?연도 기반 기본 키?

예 : 현재 연도가 2010이고 새 테이블에서 ID는 1부터 시작해야하므로 20101, 20102, 20103, 20104, 20105 ... 등등입니다.

+0

시퀀스 + 트리거 – BenV

+0

시작 값을 20100으로 설정 했습니까? – Kane

+0

@ 케인 그러나 20109 이후의이 방법은 20110에 합산됩니다! – BrunoSalvino

답변

2

을 트리거하면 올해 결합 ON INSERT 트리거와 마지막 자리가 될 것입니다 SELECT DATEPART(yyyy,GetDate());

에서 현재의 연도를 얻을 수 및 업데이트 할 수 있습니다 당신이 요청한 것 중 :

CREATE TABLE #test 
     (seeded_column INT IDENTITY(1,1) NOT NULL 
     , year_column INT NOT NULL DEFAULT(YEAR(GETDATE())) 
     , calculated_column AS CONVERT(BIGINT, CONVERT(CHAR(4), year_column, 120) + CONVERT(VARCHAR(MAX), seeded_column)) PERSISTED PRIMARY KEY 
     , test VARCHAR(MAX) NOT NULL); 

INSERT INTO #test (test) 
SELECT 'Badda' 
UNION ALL 
SELECT 'Cadda' 
UNION ALL 
SELECT 'Dadda' 
UNION ALL 
SELECT 'Fadda' 
UNION ALL 
SELECT 'Gadda' 
UNION ALL 
SELECT 'Hadda' 
UNION ALL 
SELECT 'Jadda' 
UNION ALL 
SELECT 'Kadda' 
UNION ALL 
SELECT 'Ladda' 
UNION ALL 
SELECT 'Madda' 
UNION ALL 
SELECT 'Nadda' 
UNION ALL 
SELECT 'Padda'; 

SELECT * 
FROM #test; 

DROP TABLE #test; 
+0

@Pontus Gagge가 제안한 솔루션 구현입니까? – BrunoSalvino

+0

No. @ Pontus Gagge는 두 개의 열에서 파생 된 계산 된 열 대신 두 개의 열에 복합 인덱스를 만들 것을 제안했습니다. –

+0

YEAR + COUNTER 키를 직접 구체화하려면 재미있는 대안이 될 수 있습니다. SQL Server가 계산 된 열을 복합 키와 마찬가지로 기본 키로 효율적으로 처리하는지 여부를 신중히 조사했습니다. 내 직감은 당신이 중요한 성과를 낼 것이라는 것입니다. –

9

cleaner solution은 예를 들어 composite primary key을 만듭니다. YearCounter 열.

+1

+1 형식을 별도로 유지하기 위해 +1이 필요한 이유가 무엇인지 분명하지 않지만. –

+0

내 가정은 키가 최종 사용자에게 표시 될 것입니다 (예 : 주문 번호 체계). 그렇지 않으면, 전적으로 합성 키를 권하고 싶습니다. –

3

정확하게 수행하려고하는 것이 확실치 않지만 두 필드로이 작업을 수행하는 것이 더 합리적입니다.

어떤 이유로 든 두 가지 조합이 PK 여야하는 경우 두 열을 가로 지르면됩니다. 그러나 정체성 부분은 올해를 제외한 독창적 인 것이므로 불필요한 것처럼 보입니다.

0

당신은이

마지막으로 사용한 숫자를 저장하기위한 별도의 테이블을 가지고 :) 위해 (정말 SQL 서버에서 오라클의 시퀀스와 유사한 무언가가 있는지 모르겠다) 트리거를 작성해야합니다.

또는

당신은 마지막 항목 삽입 항목을 얻고 그것의 마지막 번호를 추출 할 수 있습니다.

당신이 기술적 요구를 충족 열을