2011-12-07 3 views
7

Come la maggior parte delle persone che lavorano con Sql Server sa, è possibile dichiarare una tabella temporanea in questo modo:Indicare dinamicamente gli indici in SQL Server 2005?

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

... Questo creerà una chiave primaria e un vincolo di default in questa tabella temporanea; i nomi di questi oggetti saranno unici, creati dinamicamente da Sql Server.

È possibile creare un indice con nome dinamico per la tabella dopo che è stato creato? Ho un caso in cui una stored procedure che utilizza tabelle temporanee può eseguire più istanze contemporaneamente e vorrei aumentare le prestazioni senza rischiare un conflitto tra oggetti con nome identico nel database tempdb. Il comando CREATE INDEX richiede un nome indice esplicito.

Sto cercando una soluzione che non implichi SQL dinamico, solo nomi dinamici.

risposta

14

Questo è un non problema. I nomi degli indici non devono essere unici. Solo i nomi dei vincoli.

Così, per esempio, è possibile eseguire questo in più connessioni simultanee senza problemi

CREATE TABLE #T 
(
C INT 
) 

CREATE UNIQUE CLUSTERED INDEX ix on #T(C) 

Ma questo sarebbe cedere sotto la concorrenza

ALTER TABLE #T 
ADD CONSTRAINT UQ UNIQUE NONCLUSTERED (C) 
+3

Hmmm ... 10 anni di lavoro con SQL Server, e non l'ho mai saputo. Ho semplicemente pensato che gli indici fossero trattati come oggetti simili ai vincoli, ma l'ho appena provato e ho verificato che non ci sono conflitti. Buona informazione! –

+2

@JeremyHolovacs - i vincoli ottengono i metadati memorizzati in 'sys.objects', che presumo sia la ragione del requisito di unicità, ma gli indici no. –

+1

+1 Bello, ero sotto lo stesso presupposto di @JeremyHolovacs – Yuck

1

dovrebbero essere in grado di fare:

CREATE INDEX #foo1 ON #foo(bar); 
+0

Questo in effetti sembra essere la risposta. Grazie! –

+0

Scusa se ho dovuto cambiare la risposta a @ MartinSmith ... la sua risposta è stata più accurata. –

+0

Nessun problema, solo contento di aver trovato una soluzione ... Inoltre, mi piace Martin – Sparky