首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问触发器的写法

2012-06-08 
请教触发器的写法我有个表“Persons”,有如下字段:自动编号:ID;录入日期:P_Date;姓名:P_Name;证件编号:P_NO。

请教触发器的写法
我有个表“Persons”,有如下字段:
自动编号:ID;
录入日期:P_Date;
姓名:P_Name;
证件编号:P_NO。

其中“P_NO”编号字段为防止多个客户端同时录入造成重复,我想让这个字段通过触发器来自动生成。
这个字段这样定义:按照录入日期(取8位,如20120426)+ 三位数字来生成(每天录入的记录不会超过1000),从001开始,自动加1,例如:如果录入日期为2012年3月8日,则当天第一个编号为20120308001,第二个为20120308002,……。

P_NO字段一经生成则不能修改。

请问这个触发器应该怎么写?谢谢!



[解决办法]

SQL code
--使用一个序号管理表,管理每天的序号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 

热点排行