Tự động sinh dữ liệu cho một trường DB
(đọc bài viết đầy đủ tại
http://i-php.net)
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(DATENAME(yy,GETDATE()),2) +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 proc
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
(đọc bài viết đầy đủ tại
http://i-php.net)
Thân ái .