【问题标题】:Creating an index after dropping gives message index already exist删除后创建索引会给出消息索引已经存在
【发布时间】:2017-08-18 08:41:30
【问题描述】:

我在 sql server 2008 r2 中删除和创建索引时遇到问题。当我删除后创建索引时,它说索引已经存在。如果我搜索索引表,我看不到它存在

得到以下错误信息

Msg 1913, Level 16, State 1, Line 40 操作失败,因为 名称为“IX_PartiesIpoData_companyId”的索引或统计信息已经 存在于表“CoreReferenceStaging.dbo.PartiesIpoData”上。

尝试了以下

IF EXISTS(SELECT  * FROM  sys.indexes ind INNER JOIN   sys.index_columns ic ON  ind.object_id = ic.object_id and ind.index_id = ic.index_id 
where ind.name = 'IX_PartiesIpoData_companyId')
    DROP INDEX IX_PartiesIpoData_companyId ON PartiesIpoData
CREATE NONCLUSTERED INDEX IX_PartiesIpoData_companyId on CoreReferenceStaging.dbo.PartiesIpoData(companyId) 

还有这个

IF EXISTS(SELECT * 
FROM sys.indexes 
WHERE name='IX_PartiesIpoData_companyId' AND object_id = OBJECT_ID('CoreReferenceStaging.dbo.PartiesIpoData'))
    DROP INDEX IX_PartiesIpoData_companyId ON PartiesIpoData
CREATE NONCLUSTERED INDEX IX_PartiesIpoData_companyId on CoreReferenceStaging.dbo.PartiesIpoData(companyId) 

这就是索引表的样子

索引表

【问题讨论】:

  • 您是否尝试在 SSMS 中刷新表格?这听起来像是某些东西正在对过时的信息进行操作。
  • 如果它只运行它丢弃并刷新 SSMS 的 If 条件部分,我仍然会在表上看到索引。所以最终它不会删除表上的索引
  • 您可以在创建索引语句中使用WITH (DROP_EXISTING = ON);

标签: sql sql-server tsql sql-server-2008-r2


【解决方案1】:

只需通过 SQL Server 查询搜索现有名称索引:

SELECT * FROM Sys.Indexes WHERE name LIKE '%%'

如果同名索引已经存在,则删除它。

【讨论】:

    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多