Khi bạn làm việc SQL server sẽ không tránh khỏi việc gặp các khóa tự động tăng, nhưng với việc tăng các số nguyên thì rất đơn giản, ở bài viết mình sẽ chia sẻ đến các bạn các hàm tạo mã tự động tăng kết hợp giữa các chữ và số nguyên.
![]() |
Hàm tạo mã tự động tăng trong SQL Server |
Hàm tự động tăng cho chữ cái và số nguyên
Hàm dưới đây dùng để tạo một mã tự động tăng với sự kết hợp giữa chữ và số, cụ thể là chữ trước và số sau. Ví dụ như KH001 > KH002 > … > KH999.
CREATE FUNCTION AUTO_IDKH()
RETURNS VARCHAR(5)
AS
BEGIN
DECLARE @ID VARCHAR(5)
IF (SELECT COUNT(MAKH) FROM KHACHHANG) = 0
SET @ID = '0'
ELSE
SELECT @ID = MAX(RIGHT(MAKH, 3)) FROM KHACHHANG
SELECT @ID = CASE
WHEN @ID >= 0 and @ID < 9 THEN 'KH00' + CONVERT(CHAR, CONVERT(INT, @ID) + 1)
WHEN @ID >= 9 THEN 'KH0' + CONVERT(CHAR, CONVERT(INT, @ID) + 1)
END
RETURN @ID
END
Hàm tự động tăng chỉ cho chữ
Khác với hàm trên ta có một mã gồm cả chữ và số, thì dưới đây ta có hàm tạo mã tự động tăng chỉ cho chữ, ví dụ như AAAA > AAAB > … > ZZZZZ.
CREATE FUNCTION TAOMAVE(@BEFORECODE CHAR(6))---65->90
RETURNS CHAR(6)
AS
BEGIN
DECLARE @ONE AS SMALLINT, @TWO SMALLINT, @THREE SMALLINT, @FOUR SMALLINT, @FIVE SMALLINT, @SIX SMALLINT
DECLARE @MAVE CHAR(6)
SELECT @ONE=ASCII(LEFT(@BEFORECODE,1))
SELECT @TWO=ASCII(SUBSTRING(@BEFORECODE,2,1))
SELECT @THREE=ASCII(SUBSTRING(@BEFORECODE,3,1))
SELECT @FOUR=ASCII(SUBSTRING(@BEFORECODE,4,1))
SELECT @FIVE=ASCII(SUBSTRING(@BEFORECODE,5,1))
SELECT @SIX=ASCII(RIGHT(@BEFORECODE,1))
IF @SIX<90
SELECT @SIX=@SIX+1
ELSE
BEGIN
SELECT @SIX=65
IF @FIVE<90
SELECT @FIVE=@FIVE+1
ELSE
BEGIN
SELECT @FIVE=65
IF @FOUR<90
SELECT @FOUR=@FOUR+1
ELSE
BEGIN
SELECT @FOUR=65
IF @THREE<90
SELECT @THREE=@THREE+1
ELSE
BEGIN
SELECT @THREE=65
IF @TWO<90
SELECT @TWO=@TWO+1
ELSE
BEGIN
SELECT @TWO=65
IF @ONE<90
SELECT @ONE=@ONE+1
ELSE
RETURN NULL
END
END
END
END
END
SELECT @MAVE=CHAR(@ONE)+CHAR(@TWO)+CHAR(@THREE)+CHAR(@FOUR)+CHAR(@FIVE)+CHAR(@SIX)
RETURN @MAVE
END
Như hàm trên, bạn có thể thấy chúng ta tận dụng hàm ASCII để sort các kí tự để trả về giá trị mong muốn.
Hàm tự động tăng cho ngày tháng năm, chữ và số
Và sau đây, ta có hàm tự động tăng rất hay nhờ vào việc tạo ra một mã có sự kết hợp giữa ngày tháng năm, chữ và số. Ví dụ như mã 01012001DV00001 > 02012001DV00002.
CREATE FUNCTION auto_iddv()
RETURNS VARCHAR(15)
AS
BEGIN
DECLARE @id VARCHAR(15)
IF (SELECT COUNT(MaDV) FROM DATVE) = 0
SET @id = '0'
ELSE
SELECT @id = MAX(RIGHT(MaDV, 5)) FROM DATVE
SELECT @id = CASE
WHEN @id = 99999 THEN CONVERT(VARCHAR,GETDATE(),112) + 'DV00001'
WHEN @id >= 0 and @id < 9 THEN CONVERT(VARCHAR,GETDATE(),112) + 'DV0000' + CONVERT(CHAR, CONVERT(INT, @id) + 1)
WHEN @id >= 9 THEN CONVERT(VARCHAR,GETDATE(),112) + 'DV000' + CONVERT(CHAR, CONVERT(INT, @id) + 1)
WHEN @id >= 99 THEN CONVERT(VARCHAR,GETDATE(),112) + 'DV00' + CONVERT(CHAR, CONVERT(INT, @id) + 1)
WHEN @id >= 999 THEN CONVERT(VARCHAR,GETDATE(),112) + 'DV0' + CONVERT(CHAR, CONVERT(INT, @id) + 1)
WHEN @id >= 9999 THEN CONVERT(VARCHAR,GETDATE(),112) + 'DV' + CONVERT(CHAR, CONVERT(INT, @id) + 1)
END
RETURN @id
END
Và sau đây những hàm tạo mã tự động tăng hữu dụng trong SQL Server. Các bạn có thể dễ dàng tùy biến code để phù hợp với project của các bạn. Chúc các bạn thành công!
Hieu Ho.
Tags:
sql server