获取特定表名称中的索引名称

时间:2010-04-26 20:59:04

标签: sql-server indexing

我需要检查特定表名中是否存在此索引,而不是所有表中都存在 因为这个select语句选择了这种情况下的所有索引。

IF NOT EXISTS (SELECT name from sysindexes WHERE name = 'IDX_InsuranceID')

CREATE NONCLUSTERED INDEX [IDX_InsuranceID] ON [dbo].[QuoteInsurances] 
(
    [InsuranceID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO

谢谢,

2 个答案:

答案 0 :(得分:3)

您的支票没问题,我会更改两件事:

  • 使用sys.indexes系统目录视图(如果您使用的是SQL Server 2005或更高版本)而不是旧的,已弃用的sysindexes系统表

  • 在您的查询中添加对object_id(表格链接)的检查

这样的事情:

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IDX_InsuranceID' 
               AND object_id = OBJECT_ID('your-table-name-here'))
   -- do whatever you need to do here.....

答案 1 :(得分:0)

如果我理解正确,整个数据库中没有2个索引可以具有相同的名称,所以我认为你是安全的。如果您认为我不正确,请尝试在具有相同名称的不同表上创建两个索引,看看会发生什么......