1

就像标题所暗示的那样,我正在尝试删除一个索引,但它不起作用,即使删除了约束也是如此。使用的代码如下:

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
4

1 回答 1

4

错误信息非常清楚。当您删除约束时,相应的对象(即索引)也将被删除。

于 2013-09-09T11:17:59.947 回答