получить имя индекса в пределах конкретного имени таблицы - PullRequest
0 голосов
/ 27 апреля 2010

Мне нужно проверить, не существует ли этот индекс в определенном имени таблицы, а не во всех таблицах. потому что этот оператор 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 ]

3 голосов
/ 27 апреля 2010

Ваш чек в порядке, я бы изменил две вещи:

  • использовать представление системного каталога 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.....
0 голосов
/ 27 апреля 2010

Если я правильно понимаю, никакие 2 индекса во всей базе данных не могут иметь одинаковые имена, поэтому я думаю, что вы в безопасности. Если вы считаете, что я не прав, попробуйте создать два индекса для разных таблиц с одинаковыми именами и посмотрите, что получится ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...