Subscribe Now

Trending News

Bài viết

Lập trình, SQL Server

Tổng hợp một số Function tạo mã tự động tăng trong SQL Server

Tổng hợp một số Function tạo mã tự động tăng trong SQL Server

Trong quá trình thiết kế Cơ sở dữ liệu, để lưu trữ, chúng ta sẽ cần dùng đến những mã tự động tăng để việc quản lý được dễ dàng hơn. Không chỉ vậy, các mã tự động tăng trong SQL luôn có một ý nghĩa riêng mà khi đọc mã chúng ta có thể hiểu hết một dòng dữ liệu theo mã đó.

1. Kiểu chữ cái trước và số sau: “KH001 > KH002 > … > KH999”

Function:

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

Sử dụng: Thiết lập mặc định hàm DBO.AUTO_IDKH() cho trường MAKH

CREATE TABLE KHACHHANG(
	MAKH CHAR(5) PRIMARY KEY CONSTRAINT IDKH DEFAULT DBO.AUTO_IDKH(),
	HOTEN NVARCHAR(50) NOT NULL,
	SDT VARCHAR(11) NULL,
	DIACHI NVARCHAR(100) NULL,
	EMAIL VARCHAR(50) NULL
)

Các bạn có thể tăng chiều dài mã bằng cách khai báo tăng chiều dài của MAKH và thêm nhiều nhánh CASE hơn.

2. Kiểu chỉ bao gồm chữ cái: AAAA > AAAB > … > ZZZZZ

Function:

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

Sử dụng: Có thể gọi trong Procedure hoặc từ ứng dụng kết nối với Cơ sở dữ liệu

3. Kiểu Ngày Tháng Năm + Chữ cái + Số tự động tăng: 01012001DV00001 > 02012001DV00002

Function:

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

Sử dụng: Các bạn sử dụng tương tự như Kiểu 1

Mình đang tiếp tục cập nhật tiếp một số Funtion hữu ích khác… Theo dõi nhé các bạn!

Bài viết liên quan

Theo dõi
Thông báo của
guest

15 Góp ý
Mới nhất
Cũ nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Võ Thị kim Yến
Võ Thị kim Yến
2 năm trước

Em thấy hay ó nhưng mà tới kh999 qua khác hàng 1000 không còn đúng nữa

vanthie.zip@gmail.com
vanthie.zip@gmail.com
2 năm trước

Chỉ chèn một lần một hàng thôi ak ad , chèn nhiều dòng nó bị lỗi là do sao ạ

Trí
Trí
3 năm trước

cho mình hỏi,Function( Kiểu Ngày Tháng Năm + Chữ cái + Số tự động tăng: 01012001DV00001 > 02012001DV00002) thiết lập qua ngày mới bắt đầu từ số 1 lại thì viết sao admin. Admin có thể hướng dẫn mình không. Xin cảm ơn

ngân nguyễn
ngân nguyễn
3 năm trước

làm thế nào để bỏ nó vào nút thêm trong c# ấy ạ

Yến
Yến
3 năm trước

bị lỗi ạ??

Chung
Chung
3 năm trước

Sau khi làm theo y hệt mà vẫn phải tự thêm tay mã chính anh ơi,

Lương Mao Kiến Phát
3 năm trước
Trả lời  Admin

anh có thể chị em gọi lệnh được không ạ

Chung
Chung
3 năm trước

Em coppy y code của anh về SQL excute thành công. nhưng khi thêm dữ liệu bị lỗi nay là sao anh ?
Msg 213, Level 16, State 1, Line 23
Column name or number of supplied values does not match table definition.

Tú
3 năm trước

Cho mình hỏi: Giờ mình có ID tự tăng, làm sao sau khi xóa 1 dòng xong , mình chèn vào nó vào số tiếp theo:
Ví dụ: ID 10,11,12
Giờ xóa 12 xong mình chèn lại nó vào 13. Làm sao để khi chèn lại nó vào 12 chứ k phải 13 ạ

Lâm
Lâm
3 năm trước
Trả lời 

bạn sử dụng như thế nào mà id tự tăng được vậy ạ? mình có dùng code ở trên và insert bth nhưng id không tự tăng

Nguyên
Nguyên
3 năm trước

Alo admin để hàm AUTO_IDKH() trong Defaulvalueorbiling của col ID(nvarchar) thì chỉ thêm được 1 bản ghi đầu tiên có ID =KH0012 còn các bản ghi sau toàn ID là dbo.AUTO_IDKH()