自动增量前缀为usr。 sql server

时间:2013-10-08 15:15:30

标签: sql-server stored-procedures

我无法使用前缀usr生成自动增量编号。比如

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

2 个答案:

答案 0 :(得分:1)

没有理由将此字符串存储在任何位置,因为每一行上的前缀相同。只需使用IDENTITY列,并在查询时或视图中计算USR000...前缀等。

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

如果你真的想要存储这个值(虽然我不知道为什么你需要,因为USR000...将在每一行上,因此意义非常小,只能浪费空间),你可以添加一个持久的计算列:

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

答案 1 :(得分:1)

标识列将是一个整数。因此它永远不会是'000x',更不用说'USR000x'了。

如果你真的想让USR停留在它的前面,我猜你可能有一个列(在生成身份值后必须更新)将这些值连接在一起。或者,正如Aaron建议的那样,在运行时计算它,在视图中,无论如何。但是,这仍然不会给你领先的零。