Reputation: 9435
My Table:
CREATE TABLE USER_DATA
([ID] NVARCHAR(10),[NAME] NVARCHAR(50))
My Stored Procedure:
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
Input:
SP_INSERT_USER 'Ajit'
SP_INSERT_USER 'Amit'
Output:
ID NAME
---------- --------------------------------------------------
RP001 Ajit
RP002 Amit
This code is working fine. But the ID is fixed. It is limited to 3 digits like 001, 002, etc. If it get 1000th employee, it is not displaying properly. Is there any way to make it dynamical without fixing the length?
Upvotes: 1
Views: 2983
Reputation: 121922
Try this one -
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
Upvotes: 1