2014-01-08 76 views
0

我試圖在表上創建Update觸發器。目的是保持對該表進行更改的審計跟蹤。 代碼是很長,所以我會盡力在這裏簡化它:SQL Update觸發器將NULL與值進行比較

當TBL1更新是:

@NewFirstName = FirstName 
@NewLastName = LastName 

從插入

@OldFistName = FirstName 
@OldLastName = LastName 

已刪除

現在我想創建一個字符串,告訴用戶這樣的事情: ID1已經從約翰變成了邁克爾

這裏是我的代碼有

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

我現在面臨的問題是,在數據庫中的許多領域都有空值。因此,例如,如果FistName爲NULL,則代碼將不起作用,因爲它將NULL與某些東西進行比較,這會讓我爲null。

有沒有辦法解決這個問題?

我正在使用SQL Server 2008

回答

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) + ',' 
+0

我想過這個問題,但它不會工作,因爲我不想做任何事情,所有的NULL。我只想要形成的字符串是一個NULL並且值已更改。我只是想出瞭如何做到這一點。 – user2343837

0

就制定瞭如何做到這一點,增加和條件

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) + ','