Sql server 获取特定表名中的索引名

Sql server 获取特定表名中的索引名,sql-server,indexing,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, ST

我需要检查该索引是否不存在于特定表名中,而不是所有表中 因为此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

谢谢,

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

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

  • 在查询中添加对对象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.....

你的支票没问题,我想更改两件事:

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

  • 在查询中添加对对象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,但值得对对象ID检查进行模式范围界定-即对象ID('[schema name].[table name]')+1,但值得对对象ID检查进行模式范围界定-即对象ID('[schema name].[table name]'))我认为你是不对的,因为你可以在整个数据库中创建两个同名索引,每个表一个索引。正因为如此,我问了那个问题。你是对的。我今天学到了一些东西。我想的是约束()。它们对于数据库是唯一的,但是索引名对于表是唯一的。()我认为你是不对的,因为你可以在整个数据库中创建两个同名索引,每个表一个索引。正因为如此,我问了那个问题。你是对的。我今天学到了一些东西。我想的是约束()。它们对于数据库是唯一的,但是索引名对于表是唯一的。()