求助关于触发器更新语句不能达到想要效果
小弟发贴时分数只有36分...希望大哥们行行好帮助一下小弟。
代码如下,
目的是自动生成PSBillNo,
如果FComboBox1 和Fdate 修改后就更新PSBillNo,
如果这两个字段没有修改则保存新增时的PSBillNo,
PSBillNo的生成依据是FComboBox1 +Fdate计算的结束日期的年月+流水号,
而流水号的依据是FComboBox1 +Fdate计算的结束日期的年月,如果单据中而在这两个的组合,即取最大值再增加一位
问题:现在修改FComboBox1 和Fdate有变动之后,PSBillNo重新生成流水号依据不成功,求助
ALTER TRIGGER [dbo].[Update] ON [dbo].[t_HTPS]FOR Update,insert ASbeginDECLARE @FNO nvarchar(10) --顺序号DECLARE @FComboBox1 nvarchar(2)--订单类型英文简写DECLARE @FComboBox1Del nvarchar(2)--删除前的订单类型英文简写DECLARE @FStartdate DateTime --开始时间DECLARE @FEnddate DateTime --结束时间DECLARE @Fdate DateTime --单据时间DECLARE @FdateDel DateTime --删除前的单据时间DECLARE @Fid Int --单据内码--取删除前的代号和删除前的日期select@FComboBox1Del=FComboBox1,@FdateDel=Fdatefrom deleted--取更新前的单据内码、订单类型、当月开始和结束时间select @Fdate=Fdate,@Fid=fid,@FComboBox1=FComboBox1,@FStartdate=casewhen datepart(day,Fdate)>=26 then dateadd(day,-(datepart(day,Fdate)-26),Fdate)when datepart(day,Fdate)<26 then dateadd(day,26-datepart(day,dateadd(month,-1,Fdate)),dateadd(month,-1,Fdate))end,@FEnddate=casewhen datepart(day,Fdate)>=26 then dateadd(day,-(datepart(day,dateadd(month,1,Fdate))-25),Fdate)when datepart(day,Fdate)<26 then dateadd(day,25-datepart(day,Fdate),Fdate)endfrom inserted--取顺序号set @FNO=(select top 1 convert(varchar,REPLICATE(0,3-len(right(PSBillNo,3)+1))) + convert(varchar,right(PSBillNo,3)+1) From T_htps where FComboBox1=@FComboBox1 and Fdate between @FStartdate and @FEnddate order by PSBillNo desc)--如果本月没有生成过此类订单的顺序号,那么开始顺序号为001if @FNO is null or @FNO=''beginset @FNO='001';end--更新if @FComboBox1!=@FComboBox1Del or @Fdate!=@FdateDelbeginupdate T_htps set PSBillNo=convert(varchar,@FComboBox1)+convert(varchar,substring(convert(char(12),@FEnddate,112),3,2))+convert(varchar,substring(convert(char(12),@FEnddate,112),5,2))+convert(varchar,@FNO) where fid=@fid and PSBillNo!='' and (FComboBox1!=@FComboBox1Del or Fdate!=@FdateDel)endelse if @FComboBox1!=@FComboBox1Del and @Fdate=@FdateDelbeginupdate T_htps set PSBillNo=convert(varchar,@FComboBox1)+convert(varchar,substring(convert(char(12),@FEnddate,112),3,2))+convert(varchar,substring(convert(char(12),@FEnddate,112),5,2))+convert(varchar,@FNO) where fid=@fid and PSBillNo=''endend