触发更新并处理空值

时间:2013-07-17 20:09:58

标签: sql-server-2008

我有一个触发器,它从原始tabel获取旧值并将这些值放在除日期和用户之外的另一个表的一个单元格中,当发生任何更新时,原始表具有在插入raw时为null的属性喜欢(updatedate和updateuser),所以当这个raw更新时,这两个属性将更新到当前日期和执行更新的用户,因此触发器应该获取这两个参数,当它们为null时应获取插入的值以及何时如果获取新值,则不为null,但触发器的语法正确但结果不正确

ALTER Trigger [dbo].[OrdersUpdate] on [dbo].[Orders]
After Update
as
Declare @UpdateDate datetime, @UpdateUser uniqueidentifier
Set @UpdateDate=(Select UpdateDate from deleted)
Set @UpdateUser=(Select UpdateUser from deleted)
If @UpdateDate is null
Begin
Set @UpdateDate=(select UpdateDate from inserted)
End
Else
Set @UpdateDate=(select UpdateDate from deleted)
If @UpdateUser is null
Begin
Set @UpdateUser=(select UpdateUser from inserted)
End
Else
Set @UpdateUser=(select UpdateUser from deleted)
Insert Into UpdateRows
Select 'Orders', id,@UpdateDate,@UpdateUser,
convert(nvarchar,InvoiceID,1)+'_'+
convert(nvarchar,OrderID,1)+'_'+
MatterName+'_'+
convert(nvarchar,PrintID,1)+'_'+
OrderName+'_'+
CONVERT(nvarchar,lenght,1)+'_'+
CONVERT(nvarchar,Wide,1)+'_'+
CONVERT(nvarchar,Quantity,1)+'_'+ 
CONVERT(nvarchar,EnterDate,101)+'_'+ 
CONVERT(nvarchar,EndDate,101)
From deleted

1 个答案:

答案 0 :(得分:0)

感谢HLGEM

首先,你永远不会编写一个sql server触发器,你可以将标量参数的值设置为插入或删除的值。这些表可以包含多行。触发器必须考虑到这一点。 - HLGEM