Chưa phân loại

Code trigger tạo chuỗi ID tự tăng trong SQL

Đây là đoạn code mà mình đã dùng để tạo chuỗi ID tự tăng. Mục đích của đoạn code này nhằm tạo ID dạng chuỗi có dạng MNGxxx (ví dụ MNG001, MNG002…) và ID này sẽ tự tăng lên 1 đơn vị sau mỗi lần insert dữ liệu vào bảng Manager.

-- Create trigger for <a title="auto increment" href="http://codeimba.com/tag/auto-increment/">auto increment</a> primary key of Manager table
CREATE TRIGGER AutoIncrement
ON Manager
FOR INSERT
AS
BEGIN
DECLARE @MAXValue VARCHAR(10),@NEWValue VARCHAR(10),@NEW_ID VARCHAR(10), @OLD_ID VARCHAR(10);
--Lấy giá trị lớn nhất của UserID trong bảng Manager
SELECT @MAXValue = NVL(MAX(UserID), "0") FROM Manager
--Lấy giá trị ID được chèn vào từ bên ngoài (bất kì, không quan trọng)
select @OLD_ID = UserId from INSERTED
--Lấy phần chuỗi số đằng sau MNG rồi tăng lên 1 đơn vị
SET @NEWValue= REPLACE(@MaxValue,'MNG','')+1
-- Kiểm tra NEWValue nếu < 100
-- Nếu <100, thêm vào số 0 sao cho NEWValue có độ dài = 3
SET @NEW_ID = 'MNG'+
    CASE
       WHEN LEN(@NEWValue)<3
          THEN REPLICATE('0',3-LEN(@newValue))
          ELSE ''
       END +
       @NEWValue
--Thay thế giá trị Id từ bên ngoài bằng Id vừa được tạo
UPDATE Manager SET UserId = @NEW_ID WHERE UserId = @OLD_ID
END

Thuật toán khá đơn giản. Mình đã comment đầy đủ trong code. Bạn có thể custom các trường dữ liệu và một số thuộc tính khác theo ý bạn.

From http://codeimba.com/

Advertisements

2 thoughts on “Code trigger tạo chuỗi ID tự tăng trong SQL”

  1. Bạn ơi cho mình hỏi chút, mình chèn đoạn code này và thay table và các trường tương ứng của mình, đoạn lệnh báo thành công. Nhưng hiện tại trong bảng của mình chưa hề đc nhập giá trị. Mà khi mình chèn một record vào thì nó đều bắt phải nhập cả giá trị đã gắn trigger chứ ko cho phép để null, mà khi nhập giá trị ID đó vào thì nó tự động +1. Vậy mình đã thiếu ở bước nào nhỉ? Tks bạn

    1. Chào bạn, đoạn code trên có vấn đề khi bảng empty, do vậy, bạn có thể sửa lại đoạn
      –Lấy giá trị lớn nhất của UserID trong bảng Manager
      SELECT @MAXValue=MAX(UserID) FROM Manager

      Thành
      –Lấy giá trị lớn nhất của UserID trong bảng Manager
      SELECT @MAXValue=NVL(MAX(UserID), “0”) FROM Manager

      Để get ra ID mặc định là 0 nhé

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s