请教触发器的写法
我有个表“Persons”,有如下字段:
自动编号:ID;
录入日期:P_Date;
姓名:P_Name;
证件编号:P_NO。
其中“P_NO”编号字段为防止多个客户端同时录入造成重复,我想让这个字段通过触发器来自动生成。
这个字段这样定义:按照录入日期(取8位,如20120426)+ 三位数字来生成(每天录入的记录不会超过1000),从001开始,自动加1,例如:如果录入日期为2012年3月8日,则当天第一个编号为20120308001,第二个为20120308002,……。
P_NO字段一经生成则不能修改。
请问这个触发器应该怎么写?谢谢!
[解决办法]
--使用一个序号管理表,管理每天的序号create table IndexManager( [Date] varchar(8), px int )create table Persons( id int identity(1,1), P_Date datetime, P_Name nvarchar(10), P_NO varchar(11)) create trigger tr_Persons_Insert on Persons for insertASbegin declare @id int declare @px int declare @today varchar(8) select @today =replace(CONVERT (varchar(10),GETDATE(),120),'-','') IF EXISTS(select 1 from IndexManager where [Date]=@today) begin update IndexManager set px=px+1 where [Date]=@today --如果当天记录存在,则先更新,后取出 select @px=px from IndexManager where [Date]=@today end else begin insert into IndexManager([Date],px) values(@today,1) --如果当天记录不存在,则先插入,后取出 select @px=px from IndexManager where [Date]=@today end select @id=id from inserted update Persons set P_NO=@today + right('000' + cast(@px as varchar),3) where id=@id endinsert into Persons(P_Date,P_Name)values(getdate(),'张三1' )select * from Personsinsert into Persons(P_Date,P_Name)values(getdate(),'张三2' )select * from Persons