【发布时间】: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