如何检查 SQL Server 2005 中是不是存在非聚集索引

Posted

技术标签:

【中文标题】如何检查 SQL Server 2005 中是不是存在非聚集索引【英文标题】:How do I check if a nonclustered index exists in SQL Server 2005如何检查 SQL Server 2005 中是否存在非聚集索引 【发布时间】:2011-08-17 18:47:14 【问题描述】:

我有以下几点:

CREATE NONCLUSTERED INDEX [MyTableIndex]
ON [dbo].[tablename] ([tablename_ID],[tablename_Field1])
INCLUDE ([Tablename_Field2],[Tablename_Field3])

我想创建一个 if 语句来检查它是否存在。我该怎么做?

【问题讨论】:

***.com/questions/2689766/…的可能重复 【参考方案1】:
IF NOT EXISTS(SELECT * FROM sys.indexes WHERE name = 'MyTableIndex' AND object_id = OBJECT_ID('tablename'))
    BEGIN
        -- Index with this name, on this table does NOT exist
    END

【讨论】:

+1 这很好用。是否应该关注表架构? @gotqn - 考虑架构,您可以将其作为两部分名称包含在 OBJECT_ID 调用中,例如OBJECT_ID('myschema.tablename') 感谢您的解释:- ]【参考方案2】:

试试这个:

IF NOT EXISTS(SELECT * FROM sys.indexes WHERE Name = 'MyTableIndex')
   -- put your CREATE INDEX statement here

【讨论】:

我建议同时检查 object_id(根据 AdaTheDev 的回答),因为索引名称不是唯一的。

以上是关于如何检查 SQL Server 2005 中是不是存在非聚集索引的主要内容,如果未能解决你的问题,请参考以下文章

使用存储过程检查字符串是不是包含 SQL Server 2005 中的子字符串

使用SSIS从SQL Server 2005中的平面文件导入时如何保留NULL值

sql server2005的死锁

如何在 SQL Server 2005 中回滚 UPDATE 查询?

在 SQL Server 2005 中修改现有作业

检查 SQL Server 中是不是存在触发器的最便携方法是啥?