首页 文章

SQL Server 2008 R2:DDL触发器(ALTER_TABLE)和CONCAT_NULL_YIELDS_NULL OFF

提问于
浏览
1

我正在使用DDL触发器来监视表结构更改( ALTER_TABLE )并将标志更新为表 . 我的应用程序有 SET CONCAT_NULL_YIELDS_NULL OFF ,我无法更改它 . 使用此设置 OFF 时,向表中添加新列时,下面的触发器会出错 . 它设置为 ON ,它工作正常 .

有什么想法怎么办?

消息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

1 回答

  • 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
    

相关问题