© 2020, Developed by Hieu Dev

Hàm tạo mã tự động tăng trong SQL Server

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ự độ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 trên cũng là một ví dụ hay để bạn thực hiện mở rộng code của mình, ví dụ như bạn thực hiện thêm số 0 sau kí tự KH. Đơn giản chỉ cần lồng thêm các conditions phù hợp và xử lý chúng.

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.

Đăng nhận xét

Mới hơn Cũ hơn