就像标题所暗示的那样,我正在尝试删除一个索引,但它不起作用,即使删除了约束也是如此。使用的代码如下:
OPEN cursor_drop_indexes
FETCH next FROM cursor_drop_indexes INTO @Indexes_SchemaName, @Indexes_TableName, @Indexes_TableId,
@Indexes_IndexName, @Indexes_IndexId, @Indexes_FileGroupName, @Indexes_FillFactor
WHILE ( @@Fetch_Status = 0 )
BEGIN
-- Used to remove UNIQUE KEY constraint enforcements
IF @Indexes_IndexName NOT LIKE '%missing%' BEGIN
SET @sql_index = ' ALTER TABLE [' + @Indexes_TableName + '] DROP CONSTRAINT ['
+ @Indexes_IndexName + ']'
PRINT( @sql_index )
EXEC sp_executesql @sql_index
END
-- Remove Index
SET @sql_index = ' DROP INDEX [' + @Indexes_IndexName + '] ON ['
+ @Indexes_SchemaName + '].[' + @Indexes_TableName + ']'
PRINT( @sql_index )
EXEC sp_executesql @sql_index
FETCH next FROM cursor_drop_indexes INTO @Indexes_SchemaName, @Indexes_TableName, @Indexes_TableId
,
@Indexes_IndexName, @Indexes_IndexId, @Indexes_FileGroupName, @Indexes_FillFactor
END
CLOSE cursor_drop_indexes
错误消息是:
ALTER TABLE [TB_CARTAO_CREDITO] DROP CONSTRAINT [IX_TB_CARTAO_CREDITO_UNIQUE] DROP INDEX [IX_TB_CARTAO_CREDITO_UNIQUE] ON [dbo].[TB_CARTAO_CREDITO] 消息 3701,级别 11,状态 7,第 1 行无法删除索引 'dbo.TB_CARTAO_CREDITO.IX_TB_CARTAO',因为它没有存在或您没有权限。
谢谢并恭祝安康。
编辑:
所以,这些是我在 Hamlet Hakobyan 帮助我完成明显的代码之后对代码所做的更改
IF (SELECT is_unique FROM SYS.indexes WHERE name = @Indexes_IndexName ) = 1 BEGIN
SET @sql_index = ' ALTER TABLE [' + @Indexes_TableName + '] DROP CONSTRAINT ['
+ @Indexes_IndexName + ']'
END
ELSE
-- Remove Index
SET @sql_index = ' DROP INDEX [' + @Indexes_IndexName + '] ON ['
+ @Indexes_SchemaName + '].[' + @Indexes_TableName + ']'
PRINT( @sql_index )
EXEC sp_executesql @sql_index