2015-06-26 89 views
1

我正在使用DDL觸發器來監視表結構更改(ALTER_TABLE)並將標誌更新到表中。我的應用程序有SET CONCAT_NULL_YIELDS_NULL OFF,我無法更改它。使用此設置OFF時,向表中添加新列時,下面的觸發器出錯。它設置爲ON,它工作正常。SQL Server 2008 R2:DDL觸發器(ALTER_TABLE)和CONCAT_NULL_YIELDS_NULL OFF

任何想法該怎麼辦?

消息1934年,級別16,狀態1,過程TableChangeTracking第50行
SELECT失敗,因爲以下的SET選項不正確 設置: 'CONCAT_NULL_YIELDS_NULL'。驗證SET選項是 正確與計算列 和/或過濾索引和/或查詢通知和/或XML數據 類型方法和/或空間索引操作的索引視圖和/或索引一起使用。

代碼:

CREATE TRIGGER [TableChangeTracking] 
ON DATABASE 
FOR ALTER_TABLE 
AS 
BEGIN 
    SET NOCOUNT ON; 

DECLARE @data XML; 
DECLARE @object sysname; 

SET @data = EVENTDATA(); 
SET @object = @data.value(N'(/EVENT_INSTANCE/ObjectName)[1]', N'sysname') 

IF @object IS NOT NULL 
    update AUDIT_TABLES set NEED_TRIGGER_UPDATE = N'Y' where TABLE_NAME = @object 
END; 
GO 

回答

0

我解決了這個。我加

SET CONCAT_NULL_YIELDS_NULL ON

在開始和

SET CONCAT_NULL_YIELDS_NULL OFF

在觸發體的結束。

代碼:

CREATE TRIGGER [TableChangeTracking] 
ON DATABASE 
FOR ALTER_TABLE 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SET CONCAT_NULL_YIELDS_NULL ON; 

    DECLARE @data XML; 
    DECLARE @object sysname; 

    SET @data = EVENTDATA(); 
    SET @object = @data.value(N'(/EVENT_INSTANCE/ObjectName)[1]', N'sysname') 

    IF @object IS NOT NULL 
     update RS_AUDIT_TABLES set NEED_TRIGGER_UPDATE = N'Y' where TABLE_NAME = @object 

    SET CONCAT_NULL_YIELDS_NULL OFF; 
END; 
GO