在存储过程中创建AlphaNumeric的自动增量

时间:2013-06-04 09:01:02

标签: sql sql-server sql-server-2008 sql-server-2005

我的表:

CREATE TABLE USER_DATA
([ID] NVARCHAR(10),[NAME] NVARCHAR(50))

我的存储过程:

CREATE PROC SP_INSERT_USER
@NAME VARCHAR(50)
AS
BEGIN
DECLARE @ID NVARCHAR(50)
DECLARE @IDTEMP INT
SELECT @IDTEMP=MAX(CAST(RIGHT([ID],3) AS INT) ) FROM USER_DATA
SELECT @IDTEMP=CASE WHEN @IDTEMP IS NULL THEN 1 ELSE  @IDTEMP+1 END 
SELECT @ID='RP'+RIGHT(('000'+CAST(@IDTEMP AS VARCHAR(10))),3)
INSERT INTO  USER_DATA VALUES (@ID,@NAME)
END

输入:

SP_INSERT_USER  'Ajit'
SP_INSERT_USER 'Amit'

输出:

ID         NAME
---------- --------------------------------------------------
RP001     Ajit
RP002     Amit

此代码工作正常。但ID是固定的。它被限制为3位数字,如001,002等。如果它获得第1000名员工,则无法正常显示。有没有什么方法可以在不修复长度的情况下使其具有动态性?

1 个答案:

答案 0 :(得分:1)

试试这个 -

CREATE TABLE dbo.USER_DATA
(
      PK INT IDENTITY(1,1) PRIMARY KEY
    , ID AS 'PR' + RIGHT('00' + CAST(PK AS VARCHAR(5)), 5)
    , NAME NVARCHAR(50)
)

GO

CREATE PROC dbo.SP_INSERT_USER

    @NAME VARCHAR(50)

AS BEGIN

    INSERT INTO dbo.USER_DATA 
    VALUES (@NAME)

END

GO

EXEC dbo.SP_INSERT_USER 'Ajit'
EXEC dbo.SP_INSERT_USER 'Amit'

SELECT ID, NAME 
FROM dbo.USER_DATA
相关问题