Sql server 禁用SQL Server 2008 R2中某些表的索引操作(DDL触发器除外)
有没有办法禁用MS SQL Server 2008 R2中表列表的certian index DDL操作(创建、删除和更改索引) 我试图做的是创建一个DDL触发器来捕获这些事件并回滚它们,但似乎所有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
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中央论坛。以下是链接: