2011-08-20 2 views
1

이 명령을 수정하여 00000과 같이 5 자리 정수가 있고 00001부터 시작하는 ID 열을 만들려면 어떻게해야합니까?SQL Server IDENTITY 열

CREATE TABLE [dbo].[Company] 
(
    [CompanyId] [bigint] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](200) NOT NULL 
) 

답변

6

정수에는 앞에 0이 없습니다. 정수를 표시 할 문자열로 변환 할 때 처리 할 서식 문제입니다.

당신이 정말로, 정말로 바로 SQL에서 같은 문자열을 제시 할 수 있어야하는 경우 계산 된 열 함께 할 수 있습니다 : 아무튼 서식하지만

CREATE TABLE [dbo].[Company]( 
    [CompanyId] [bigint] IDENTITY(1,1) NOT NULL, 
    [FormattedCompanyId] AS RIGHT('0000'+ CONVERT(VARCHAR,Num),5), 
    [Name] nvarchar NOT NULL, 

내가 사용하지 않을 것이라고 솔루션 자신 데이터 저장소에 속합니다.

+3

해당 제목 인 "** 당신이 바로 SQL에서 같은 문자열을 제시 할 수 있어야합니다 ** 경우"...이 더 프레 젠 테이션 계층의 우려처럼 들린다. – Aaronaught

+1

실제로 계산 된 열에'PERSISTED' 키워드를 추가하여 실제로 값을 디스크에 저장함으로써 쿼리 성능을 크게 향상시킬 수 있습니다. (해당 열의 인덱싱을 허용합니다) –

0

앞에 0을 직접 추가해야합니다. 해결책으로 "formatedID"라고하는 다른 colomn을 추가하고 ID 컬럼의 값으로 "삽입 트리거 후"로 업데이트하고 원하는 선행 0으로 포맷 할 수 있습니다.

예 :

CREATE TABLE [dbo].[Company] 
(
    [CompanyId] [bigint] IDENTITY(1,1) NOT NULL, 
    [FormattedID] [VARCHAR(20)], 
    [Name] [nvarchar](200) NOT NULL 
) 

CREATE TRIGGER ON [dbo].[Company] 
FOR INSERT 
AS 
BEGIN 
    UPDATE [dbo].[Company] 
    FROM inserted 
    SET FormattedID = RIGHT('0000'+ CONVERT(VARCHAR, [dbo].[Company].CompanyId),5) 
    WHERE dbo.Company.CompanyId = inserted.CompanyId 

END 
+3

방아쇠. –