2011-05-03 114 views
48

存在,我有以下一个非聚集索引:如何检查,如果在SQL Server 2005

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

我想创建一个if语句来检查如果存在的话。我该怎么做呢?

+1

的可能的复制http://stackoverflow.com/questions/2689766/how-do-you-check-if-a-certain-index-exists-in -a表 – 2013-05-21 01:38:13

回答

109
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 
+0

+1这工作很好。应该不关心表格模式? – gotqn 2013-04-10 12:29:04

+7

@gotqn - 要将模式考虑在内,您可以在OBJECT_ID调用中将其作为两个部分的名称包含在内。 OBJECT_ID('myschema.tablename') – AdaTheDev 2013-04-10 12:36:23

+0

谢谢你的解释: - ] – gotqn 2013-04-10 12:50:59

14

试试这个:

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

我建议还检查object_id(按照AdaTheDev的答案)作为索引名称不唯一。 – mcNux 2015-06-02 14:10:04