tsql触发器
--有两张表,客户表和项目表,要求:新建项目时自动生成项目编号,每个不同的客户的项目的编号从1开始
--项目编号格式为PJ+"-"+"客户编号"+"-"+"日期"+"-"+"流水号"
--如项目编号:PJ-ABCD-120805-0001
create table testAccount
(
tAccountName nvarchar(100),--客户名称
tAccId nvarchar(32) --客户编号
)
create table testProject
(
tProName nvarchar(100),--项目名称
tProId nvarchar(32), --项目编号
tIdAcc nvarchar(100), --客户编号
tProGuid nvarchar(64) --Guid
)
go
----------------------------------
alter trigger T_AutoNumber
on testProject
after insert
as
begin
declare @one nvarchar(8)
declare @two nvarchar(32)
declare @three nvarchar(8)
declare @four int
declare @guid nvarchar(64)
---------------------------------------------------
set @one='PJ'
set @three=convert(varchar(8),getdate(),112)
select @two=tIdAcc,@guid=tProGuid from inserted
select @four=max(cast(right(tProId,4)as int)) --这里的值应该是空值
from testProject
where tIdAcc=@two
------------------------------------------------
if @four is null --
set @four=0 --执行插入时,变量@four应该为0,为什么插入时得到的数字为0001呢?
else
set @four=cast(@four as int)
set @four=@four+1
--------------------------------------------------------
update testProject set tProId=@one+'-'+@two+'-'+@three+'-'+right('0000'+cast(@four as varchar),4)
where tProGuid=@guid
end
go
----------------------------------------------------------------------------------------------------------
在网上看到的触发器,有点看不明白:
插入一行数据时,@four变量应该为空啊,
select @four=max(cast(right(tProId,4)as int)) --这里的值应该是空值
from testProject
where tIdAcc=@two
----------------------------------
那么应该执行:
if @four is null --
set @four=0
得到的应该为0,
为什么,我插入一行时,@four会得到0001呢??
望解释下,刚开始学触发器,有点不明白!