Thứ Hai, 21 tháng 6, 2010

Tự động sinh dữ liệu cho một trường DB

Tự động sinh dữ liệu cho một trường DB


Rất nhiều trường hợp chúng ta cần tự sinh mã , chuỗi cho một số trường khi dữ liệu được insert vào database .

Ví dụ mỗi sinh viên Aptech sẽ có mã kiểu như A000856 , 856 đơn giản là ID của sinh viên , nhưng toàn bộ hệ thống aptech toàn cầu chỉ quản lý thông qua code chứ không phải ID . Chính vì vậy code trên tự sinh ra từ ID là ngon nhất .

Cách làm :

1.Dùng table


CREATE TABLE Aptech_Student
(
sname varchar(15),
ID int identity(1,1),
code AS 'A' + RIGHT('0000'+CAST(ID AS varchar(4)),4)
)
Test:
insert into test (sname) values (1)
--
select *from test
--
sname ID student_ID
1 1 A00001


2.Dùng function

create function CustomerNumber (@id int)
returns char(5)
as
begin
return 'C' + right('0000' + convert(varchar(10), @id), 4)
end
--

Gán hàm trên vào cột:

alter table Customers add CustomerNumber as dbo.CustomerNumber(dbID)

hoặc gán vào trigger

Dùng trigger

alter Customers add CustomerNumber varchar(10)


create trigger Customers_insert
on Customers after insert
as
update Customers
set Customers.customerNumber = dbo.CustomerNumber(Customers.dbID)
from Customers inner join inserted
on Customers.dbID= inserted.dbID

3.Dùng procedure

create procedure prcGenCode
@codeno char(6) OUTPUT
as
select @codeno = Max(Ccodeno) from testtable
select @codeno =
case
when @codeno >=0 and @codeno < 9 then '00000' + convert(char,@codeno + 1) when @codeno >=9 and @codeno < 99 then '0000' + convert(char,@codeno + 1) when @codeno >=99 and @codeno < 999 then '000' + convert(char,@codeno + 1) when @codeno >=999 and @codeno < 9999 then '00' + convert(char,@codeno + 1) when @codeno >=9999 and @codeno < 99999 then '0' + convert(char,@codeno + 1) when @codeno >=99999 then convert(char,@codeno + 1)
end
return


Như vậy có thể thấy cách gen dùng trực tiếp trên bảng văn minh hơn .
Cách làm này dễ nhất , nhưng ít người biết , mà thường sử dụng các giải pháp Trigger , hoặc procedure ..

3 nhận xét:

  1. to vote cach lam thu nhat, don gian va gon nhe. Dung procedure cong kenh kho kiem soat, neu khong khoa bang thi de dan den trung khoa (max(ID)+1) khi co nhieu nguoi cung insert. Ngoai ra con khong dung duoc voi truong hop insert nhieu ban ghi dong thoi, insert...select...from

    Trả lờiXóa
  2. Customers.customerNumber = dbo.CustomerNumber(Customers.dbID) thế này là phải nối 2 bảng à bạn

    Trả lờiXóa
  3. đâu có . vẫn chỉ là một bảng mà

    Trả lờiXóa