SQL Update触发器将NULL与值进行比较

时间:2014-01-08 01:50:25

标签: sql sql-server sql-server-2008 triggers sql-update

我正在尝试在表上创建Update触发器。目的是保持对该表所做更改的审计跟踪。 代码很长,所以我会在这里尝试简化它:

当tbl1的更新发生时:

@NewFirstName = FirstName
@NewLastName = LastName

从插入

@OldFistName = FirstName
@OldLastName = LastName

来自已删除

现在我想创建一个字符串,告诉用户这样的事情: ID1已从John更改为Michael

这是我的代码

if (@OldFistName <> @NewFirstName )          
set @AuditString = @AuditString + ' NewFirstName from ' + cast(@OldFistName as varchar)  + '  to  ' +  cast (@NewFirstName as varchar)  + ','

我面临的问题是数据库中的许多字段都有NULLS。因此,例如,如果FistName为NULL,则代码将无法工作,因为它将NULL与某些内容进行比较,这会使我为空。

有什么方法吗?

我正在使用SQL Server 2008

2 个答案:

答案 0 :(得分:0)

是的,有一个简单的解决方法。只需检查if条件是否为变量。代码看起来像:

if @OOldFistName is null
  -- Your code to handle this
else if @NewFirstName is null
  -- Your code to handle this
else if (@OldFistName <> @NewFirstName )
set @AuditString = @AuditString + ' NewFirstName from '
                   + cast(@OldFistName as varchar) + ' to '
                   + cast (@NewFirstName as varchar) + ','

答案 1 :(得分:0)

刚刚弄清楚如何做到这一点,添加AND条件

if   (@OldFistName is null AND @NewFirstName IS NOT NULL )
  set @AuditString = @AuditString + ' FistName from ' + 'NULL '  + '  to  ' +  cast (@NewFirstName as varchar)  + ','
  ELSE
  if (@OldFistName <> @NewFirstName )          
  set @AuditString = @AuditString + ' NewFirstName from ' + cast(@OldFistName as varchar)  + '  to  ' +  cast (@NewFirstName as varchar)  + ','