Sql server 2008 触发器更新和处理空值

Sql server 2008 触发器更新和处理空值,sql-server-2008,Sql Server 2008,我有一个触发器,它从原始表中获取旧值,并将这些值放在除日期和用户之外的另一个表的一个单元格中,当发生任何更新时,原始表的属性在插入原始数据时为null,如(updatedate和updateuser),因此,当这个原始数据被更新时,这两个属性将被更新为当前日期和更新的用户,因此触发器应该获取这两个参数,当它们为null时,应该获取插入的值,当它们不为null时,应该获取新值,但是触发器的语法是正确的,但结果是不正确的 ALTER Trigger [dbo].[OrdersUpdate] on [

我有一个触发器,它从原始表中获取旧值,并将这些值放在除日期和用户之外的另一个表的一个单元格中,当发生任何更新时,原始表的属性在插入原始数据时为null,如(updatedate和updateuser),因此,当这个原始数据被更新时,这两个属性将被更新为当前日期和更新的用户,因此触发器应该获取这两个参数,当它们为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
谢谢你


首先,您从未编写过sql server触发器,其中您将标量参数的值设置为inserted或deleted中的值。这些表可以包含多行。触发器必须考虑到这一点HLGEM

首先,您从未编写过sql server触发器,在该触发器中将标量参数的值设置为插入或删除的值。这些表可以包含多行。触发器必须考虑到这一点。感谢你的建议,你说得完全正确,在这种情况下,我想它将返回一个原始数据,但如果不是,我如何指定一个原始数据,一个已更新的数据?你永远无法做出这种假设,除了用户界面之外,其他因素会影响数据库。如果只处理一行,那么编写触发器是不负责任的。我很难看到您实际想要实现的目标,所以请您提供一些更新的示例数据,以及您希望触发器从这些数据中为UpdateRows添加的内容。非常感谢,我确实解决了我的问题,但我会记住您的建议。。。。。再次非常感谢,但我如何才能将此问题标记为已回答?