如何检查SQL Server 2005中是否存在非聚簇索引

use*_*104 62 sql-server-2005 non-clustered-index

我有以下内容:

CREATE NONCLUSTERED INDEX [MyTableIndex]
ON [dbo].[tablename] ([tablename_ID],[tablename_Field1])
INCLUDE ([Tablename_Field2],[Tablename_Field3])
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*Dev 135

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
Run Code Online (Sandbox Code Playgroud)

  • @gotqn - 要将模式考虑在内,您可以在OBJECT_ID调用中将其作为两部分名称包含在内,例如OBJECT_ID('myschema.tablename') (8认同)
  • +1 这很好用。是否应该关心表模式? (2认同)

mar*_*c_s 15

试试这个:

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

  • 我还建议检查object_id(根据AdaTheDev的答案),因为索引名称不是唯一的. (4认同)