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 ..
(i-php.net)