【问题标题】:SQL Server 2008 R2 : DDL trigger (ALTER_TABLE) and CONCAT_NULL_YIELDS_NULL OFFSQL Server 2008 R2:DDL 触发器 (ALTER_TABLE) 和 CONCAT_NULL_YIELDS_NULL OFF
【发布时间】:2015-06-26 23:17:23
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: triggers sql-server-2008-r2 ddl


    【解决方案1】:

    我解决了这个问题。我加了

    设置 CONCAT_NULL_YIELDS_NULL 开

    在开头和

    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
    

    【讨论】:

      猜你喜欢
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多