2013-10-08 2 views
0

접두사 usr으로 자동 증가 번호를 생성 할 수 없습니다. 같은접두어 usr으로 자동 증가. SQL 서버

usr001,

usr002 ...로

도움이 필요

create procedure USP_PatientAdd 
@patientID varchar(max), 
@patientName varchar(max), 
@patientAge varchar(max), 
@patientSex varchar(max), 
@patientFather varchar(max), 
@patientAddr varchar(max), 
@patientNumber varchar(max) 
as 
insert into PTN_DTL(
PTN_DTL_ID, 
    PTN_DTL_NAME, 
    PTN_DTL_AGE, 
    PTN_DTL_SEX, 
    PTN_DTL_FATHER, 
    PTN_DTL_ADDR, 
    PTN_DTL_NU 
) 
values (
'USR' + RIGHT('000000'+CAST((Select MAX() + 1 as varchar(6)),6), 
@patientName, 
@patientAge, 
@patientSex, 
@patientFather, 
@patientAddr, 
@patientNumber 
) 
end 
+1

왜? 쿼리 타임에 IDENTITY 컬럼을 사용하고 'USR0000x'를 계산하면됩니다. 공간을 낭비하는 것 이외에 테이블 서비스의 모든 단일 행에'USR0000 '을 저장하는 목적은 무엇입니까? –

+0

죄송합니다 .. @Aaron Bertrand .. 무슨 뜻인지 알 수 없습니다. IDENTITY 열이 아닙니다. is't varchar (20) – Nisar

+1

그리고 나는 *** 대신 IDENTITY 컬럼을 사용한다고 말하고 있습니다 ***. 왜 이것이 varchar인가 (20) 나는 잘 모른다. –

답변

1

접두사가 매에서 동일하게되기 때문에, 어느 곳이 문자열을 저장 할 이유가 없습니다 행. 그냥 있기 때문에, 당신이 정말로 (저장이 값을 원하는 경우에 나는 아무 생각이 없지만

CREATE TABLE dbo.foo(id INT IDENTITY(1,1)); 
GO 
INSERT dbo.foo DEFAULT VALUES; 
GO 3 
SELECT 'USR' + RIGHT('000000' + CONVERT(VARCHAR(6), id), 6), id FROM dbo.foo; 
GO 
CREATE VIEW dbo.view_foo 
AS 
    SELECT foo_id = 'USR' + RIGHT('000000' + CONVERT(VARCHAR(6), id), 6), id 
    FROM dbo.foo; 
GO 
SELECT foo_id, id FROM dbo.view_foo; 
GO 

왜 당신이 필요 것 인 IDENTITY 열을 사용하고, 등 USR000... 쿼리시 접두사, 또는보기를 계산 식별 컬럼은 정수가 될 것입니다

ALTER TABLE dbo.foo ADD foo_id AS CONVERT(CHAR(9), 
    'USR' + RIGHT('000000' + CONVERT(VARCHAR(6), id), 6)) PERSISTED; 
+0

Thanks @Aaron Berthand .. – Nisar

1

: USR000..., 당신은 지속 계산 된 열을 추가 할 수 있습니다) 모든 단일 행에있을, 따라서 거의 의미가 폐기물 공간 만 제공됩니다. 따라서 결코 '000x'가 될 수없고 'USR000x'가 훨씬 적습니다.

정말로 앞에 USR이 붙어 있다면 값을 연결하는 열 (ID 값이 생성 된 후 업데이트해야 함)을 가질 수 있다고 생각합니다. 또는 Aaron이 제안한 것처럼 실행 시간에 계산하여 볼 수 있습니다. 그러나 그것은 여전히 ​​당신에게 선도 0을주지 않을 것입니다.