SQL Server:"if not exists... create index"模式失败"because an index or statistics already exists"



我需要可靠的代码来说"创建索引,如果它不存在。";

我以为我有了:

IF NOT EXISTS (SELECT * 
FROM sys.indexes 
WHERE name = 'IX_GraphedTripleValueBit_PropertyDefinitionId' 
AND object_id = OBJECT_ID('internal_dot_dotalign_dot_com_teams_1.GraphedTripleValueBit')) 
BEGIN 
CREATE INDEX IX_GraphedTripleValueBit_PropertyDefinitionId 
ON internal_dot_dotalign_dot_com_teams_1.GraphedTripleValueBit(PropertyDefinitionId) 
INCLUDE (GraphedEntityRootUid) 
END;

但是我得到了这个错误:

操作失败,因为索引或统计数据名称为'IX_GraphedTripleValueBit_PropertyDefinitionId'已经存在于表'GraphedTripleValueBit'上

我需要检查sys.indexessys.stats吗?(?)

我们的SQL是代码生成的(c#,而不是实体框架),并在部署时针对客户端的SQL Azure DB运行。因此,至少在他们的DBA在线提供访问权限之前,我无法轻易地进入那里,直接查看sys表。此外,有很多这样的表,所以我不想在检查时产生额外的开销,除非需要(尽管现在检查sys。统计是我的主要理论)。所以想在这里问一下。

想法吗?

仔细检查,似乎有两个应用程序实例试图迁移同一个表。假设,IF NOT EXISTS条件是在true语句的时候检查的,但是当它执行CREATE语句的时候,已经有一个冲突的索引了。

最新更新