2012-01-23 3 views
0
내 ID는 형식이 같은 자동 생성하고 싶은 싶은

:기본 키

12-0001, 12-0002 

(12)는 시스템 날짜의 현재 연도 인 2012 년 대표 .

그리고 ID에 대한 마지막 기록은 12-0999과 2013 내 ID는이 같은 4 자리 연도 접두사를 변경하고 재설정 할 때 : 내가 asp.net의 MVC를 사용하고

13-0001, 13-0002. 

을 3 및 SQL Server Express 2008.

누구든지이 작업을 수행 할 수있는 방법을 말해 줄 수 있습니까?

+0

@marc_s 날짜 또는 데이터가 없습니다. 내 테이블에 IME 열. 내 테이블 이름에 자동 생성 된 EMPLOYEEID 열 (예 : 성, 이름, 생일, 주소 등)이 있습니다. – keizune

+0

@keizune : 내 응답을 봅니다. 옵션 번호를보십시오. 2 –

답변

2

나는 두 가지 옵션을 참조하십시오

당신이에 데이터를 삽입하고 테이블이있는 "오른쪽"올해가있는 DATE 또는 DATETIME 열이있는 경우

(1), 당신은 단순히 지속, 계산을 추가 할 수 있습니다 테이블에 열 - 같은 :

ALTER TABLE dbo.YourTable 
ADD PKID AS RIGHT(CAST(YEAR(DateColumn) AS CHAR(4)), 2) + '-' + 
       RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED 

ID가 일련 번호를 자동 생성 INT IDENTITY 열임을 가정하고 (필요에 따라 변경) 새 열 PKID를 호출합니다.

계산 된 열 이기 때문에 행이 삽입 될 때 한 번 계산되고 색인을 생성하여 기본 키로 사용할 수 있습니다.

(2) 테이블에 날짜 열과 같은 것이없는 경우 유일한 옵션은 AFTER INSERT 트리거를이 테이블에 트리거하는 것입니다 (다시 : 열이 있다고 가정하면 ID INT IDENTITY) 자동 증가 번호를 제공합니다 : 트리거가

:-) 거기에 값을 저장할 수 있도록
CREATE TRIGGER trgInsert ON dbo.YourTable 
AFTER INSERT 
AS 
BEGIN 
    DECLARE @YearPrefix CHAR(2) 
    SET @YearPrefix = RIGHT(CAST(YEAR(GETDATE()) AS CHAR(4)), 2) 

    UPDATE dbo.YourTable 
    SET OtherID = @YearPrefix + '-' + RIGHT('00000' + CAST(i.EmployeeID AS VARCHAR(5)), 5) 
    FROM INSERTED i 
    WHERE dbo.YourTable.EmployeeID = i.EmployeeID 
END 

그리고 물론

는, 먼저,도 테이블이 새 PKID 열을 추가 할 필요가
ALTER TABLE dbo.YourTable 
ADD PKID VARCHAR(10) NOT NULL DEFAULT ('X') -- needs to be NOT NULL for Primary Key 
+0

시스템 날짜를 2014와 같이 변경하면 새로운 값이 삽입되고 14-0068이되고 테이블의 마지막 레코드는 12-0067이됩니다. 나는 그것을 14-0068 대신에 14-0001로 만들고 싶다. – keizune

+0

@keizune : 글쎄,이 경우에는 'IDENTITY' 열을 사용할 수 없습니다. SQL Server 2008 R2 또는 이전 버전에서는 제대로 작동하려면 많은 수작업을해야합니다. 또는 데이터베이스 개체로 'SEQUENCE'를 지원할 SQL Server ** 2012 **를 기다려야합니다. 새해에 다시 1로 시작하도록 재설정). –

+0

제안 해 주셔서 감사합니다.하지만 제공해 주신 코드를 계속 사용하겠습니다. 그것은 내 프로젝트에 큰 문제가되지 않습니다. – keizune