Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 禁用SQL Server 2008 R2中某些表的索引操作(DDL触发器除外)_Sql Server_Sql Server 2008_Indexing_Triggers_Ddl - Fatal编程技术网

Sql server 禁用SQL Server 2008 R2中某些表的索引操作(DDL触发器除外)

Sql server 禁用SQL Server 2008 R2中某些表的索引操作(DDL触发器除外),sql-server,sql-server-2008,indexing,triggers,ddl,Sql Server,Sql Server 2008,Indexing,Triggers,Ddl,有没有办法禁用MS SQL Server 2008 R2中表列表的certian index DDL操作(创建、删除和更改索引) 我试图做的是创建一个DDL触发器来捕获这些事件并回滚它们,但似乎所有DDL触发器都在触发器之后,如果表非常大,则会导致性能问题 我当前使用的触发器如下所示: CREATE TRIGGER index_guard ON DATABASE FOR CREATE_INDEX, DROP_INDEX, ALTER_INDEX AS DE

有没有办法禁用MS SQL Server 2008 R2中表列表的certian index DDL操作(创建、删除和更改索引)

我试图做的是创建一个DDL触发器来捕获这些事件并回滚它们,但似乎所有DDL触发器都在触发器之后,如果表非常大,则会导致性能问题

我当前使用的触发器如下所示:

CREATE TRIGGER index_guard
    ON DATABASE
    FOR CREATE_INDEX, DROP_INDEX, ALTER_INDEX
    AS
        DECLARE @object_name NVARCHAR(50);
        DECLARE @table_name NVARCHAR(50);
        DECLARE @target_object_type NVARCHAR(20);
        DECLARE @object_type NVARCHAR(20);
        DECLARE @lookup_value NVARCHAR(100);

        DECLARE @protected_indexes TABLE (Name NVARCHAR(50))
        INSERT INTO @protected_indexes
        SELECT Name FROM (VALUES ('TABLE1/IX_IdName'), ('TABLE2/IX_NameId')) AS tbl(Name)

        SELECT @object_name = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)');
        SELECT @table_name = EVENTDATA().value('(/EVENT_INSTANCE/TargetObjectName)[1]','nvarchar(max)');
        SELECT @target_object_type = EVENTDATA().value('(/EVENT_INSTANCE/TargetObjectType)[1]','nvarchar(max)');
        SELECT @object_type = EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(max)');

        IF @object_type = 'INDEX' AND @target_object_type = 'TABLE'
        BEGIN
            SET @lookup_value = @table_name + '/' + @object_name
            IF EXISTS (SELECT 1 FROM @protected_indexes A WHERE A.Name = @lookup_value)
            BEGIN
                ROLLBACK
            END
        END

我还将我的问题发布到SQLServer中央论坛。这里是链接:我也将我的问题发布到SQLServer中央论坛。以下是链接: