2014-02-14 2 views
0

문자로 시작하는 카운터 필드와 일반 카운터로 숫자가 필요하지만 카운터의 번호는 x가 0이어야합니다.SQL Server의 특수 카운터 필드

예 :

 
L00001 
L00002 
L00003 

은 SQL 서버의 이러한 카운터를 구성 할 수있다?

업데이트 : 그것은 새로운 행이 추가 될 때 1 씩 증가되는 자동 생성 카운터 값이어야

. 테이블의 행 수가 L99999만큼 커지는 일은 결코 없습니다.

해당 Sql server 2012 express를 사용하고 있습니다. SQL Server를 가정

+0

사용하는 SQL 서버의 어떤 버전을 만들이 쿼리를 사용? – TTeeple

+0

새 값을 추가하거나 선택 쿼리에서 열만 원할 때 열 (테이블 디자인)에서 자동으로 카운터 값을 생성 하시겠습니까 ??? –

+1

그리고 'L99999'에 도달하면 어떻게 될까요? –

답변

2

한 가지 트릭, 계산 된 열 사용

--DROP TABLE MyTable 
CREATE TABLE MyTable 
(
    MyTableId int not null identity(1,1) 
    ,MyTableKey as 'L' + right('00000' + cast(MyTableId as varchar(5)), 5) 
    persisted 
    constraint PK_MyTable 
    primary key clustered 
    ,SomeData varchar(50) 
) 

열 MyTableKey은 ID 열을 기반으로 실제로 테이블에 저장하여 계산된다 (즉석에서 계산 반대로, 지속 - 그래서 그것은 단지입니다 행이 처음 삽입 될 때 계산 됨). 이것은 색인을 생성 할 수있게하고, "Id"열을 참조 할 필요가없는 기본 키로 설정합니다.

일부 샘플 데이터 :

INSERT MyTable (SomeData) values 
    ('First') 
,('Second') 
,('Third') 
,('Etc') 

SELECT * 
from MyTable 
+0

나는 그의 케이스에 대해'right ('00000'+ cast (MyTableId varchar (5)), 6)'이 실제로'right (..., 5) '이어야한다고 생각하지만, 어쨌든 이것은 좋은 해결책이다 . +1 – Manny

+0

우스, 나는 그것을 놓쳤다 - 원래 "L"을 '올바른'진술서 안에 넣었고, 실수를 입증 한 길이를 조정하지 않았다. 답변이 조정되었습니다. –

0

, 이것은 당신이 지금까지 카운터가 간다 (당신이 너무 것을 필요가 있는지 확실하지 않습니다) 무엇을 찾고 있는지 될 수있다 :

ROW_NUMBER () 
    OVER ([ PARTITION BY value_expression , ... [ n ] ] order_by_clause) 
예를 들어

http://technet.microsoft.com/en-us/library/ms186734.aspx

,

SELECT 
    SomeColumn, 
    ROW_NUMBER() OVER (ORDER BY SomeColumn) AS Number 
FROM 
YourTable 

지금까지 제로로 값을 패딩, 당신은 같은 것을 수행 할 수 있습니다

REPLICATE은 지정한 값을 N 번 반복합니다. N은 입력 한 숫자입니다. 잠재적 인 시나리오 인 경우 YourId의 길이가 5를 초과하면 (반환 값은 NULL) 어떤 일이 발생하는지 고려해야합니다.

http://technet.microsoft.com/en-us/library/ms174383.aspx

+0

업데이트에 따르면 행 삽입시이 작업을 수행해야하므로이 솔루션은 더 이상 적용되지 않습니다. Philip Kelley의 대답은 필요한 것을 처리합니다. – Manny

0

난 당신이 VARCHAR 반환하는 함수를 만들 필요가 있다고 생각하고 입력이 테이블의 최대 값은 그것에서 당신은 단지 왼쪽 int입니다했다하도록 @i를 제거 얻을 기능 내부

을 필요로하지 않으며 하나

Declare @i char(1)='L' 
Declare @max int=1112 

select @i+replicate('0',4-len(@max)+1)+casT(@max as varchar) 
0

에 의해 @max 증가에 저장 당신은 또한 물건 기능을 시도 할 수 있습니다 :

DECLARE @Number INT = 123 
SELECT 'L' + STUFF('00000', 5-LEN(@Number)+1, LEN(@Number) , @Number) 
+0

좋아, 자동 생성 카운터가 필요합니다 ... [link] (http://stackoverflow.com/questions/8170950/how-do-i-add-string-with-auto-increment-value-in- sql-server)를 사용하면 @marc_s 사용자가 해결책을 찾을 수 있습니다. –

+0

감사! 0을 제외하고 작동해야합니다. – MikeAlike234

0

안녕하세요 데이비드는 테이블

CREATE TABLE [dbo].[Emp](
     [ID] [int] IDENTITY(1,1) NOT NULL, 
     [Name] [varchar](50) , 
     [AutoGeneratedColumn] AS ('L'+right(replicate('0',(5))+CONVERT([varchar](5),[ID],0),(5))) 
    ) ON [PRIMARY] 
+0

위의 쿼리에서 @david AutoGeneratedColumn은 Coloumn 카운터입니다. –