Home Thủ thuật Programing Tổng hợp một số Function tạo mã tự động tăng trong SQL

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

6 min read
4
0
2,424
Tổng hợp một số Function tạo mã tự động tăng trong SQL

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!

Load More In Programing

4 Comments

  1. Tháng Mười Một 27, 2017 at 9:55 sáng

    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 ạ

    Reply

    • Dong

      Tháng Mười Một 28, 2017 at 3:19 sáng

      Để làm được như vậy thì bạn phải khai báo kểu ID là kểu số bình thường, không tự động tăng. Sau đó bạn viết một triger hoặc một hàm để tự động cập nhật ID khi bạn insert thêm 1 row, quy trình của hàm này sẽ lấy giá trị cột ID cuối cùng cộng thêm 1 đơn vị rồi chèn vào row bạn đang insert 🙂

      Reply

  2. nguyên

    Tháng Tư 20, 2017 at 1:36 sáng

    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()
    Thank

    Reply

    • Dong

      Tháng Tư 26, 2017 at 11:04 sáng

      Thường thì ID thì bạn không nên để NVARCHAR nhé. Hàm AUTO_IDKH() chỉ hoạt động với khai báo kiểu VARCHAR, thì kiểu khai báo ID của bạn phải cùng kểu với hàm, nếu không cùng kiểu hàm sẽ không hoạt động được nha 🙂

      Reply

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *