0

我无法生成带有前缀 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
4

2 回答 2

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;
于 2013-10-08T15:28:35.897 回答
1

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

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

于 2013-10-08T15:28:53.440 回答