Динамически называть индексы в SQL Server 2005? - PullRequest
7 голосов
/ 08 декабря 2011

Как известно большинству людей, работающих с Sql Server, вы можете объявить временную таблицу следующим образом:

create table #foo 
    (
    row_id int identity not null primary key,
    bar varchar(50) not null default 'YoMomma'
    );

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

Можно ли создать динамически именованный индекс для таблицы после ее создания?У меня есть случай, когда хранимая процедура, использующая временные таблицы, может запускать несколько экземпляров одновременно, и я хотел бы повысить производительность, не рискуя конфликтом между объектами с одинаковыми именами в базе данных tempdb.Команда CREATE INDEX требует явного имени индекса.

Я ищу решение, которое не включает динамический SQL, только динамические имена.

Ответы [ 2 ]

14 голосов
/ 08 декабря 2011

Это не проблема. Имена индексов не должны быть уникальными. Только имена ограничений.

Так, например, вы можете запустить это в нескольких одновременных соединениях без проблем

CREATE TABLE #T
(
C INT
)

CREATE UNIQUE CLUSTERED INDEX ix on #T(C)

Но это не удастся при параллельном

ALTER TABLE #T
ADD CONSTRAINT UQ UNIQUE NONCLUSTERED (C)
1 голос
/ 08 декабря 2011

Должно быть в состоянии сделать:

CREATE INDEX #foo1 ON #foo(bar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...