2009-03-18 11 views
3

Verwendung von T-SQL Ich habe festgestellt, dass ich 'ALTER INDEX' nicht mit den Tabellen-/Indexwerten in Variablen verwenden kann, ohne einen Syntaxfehler zu bekommen. Gibt es eine Möglichkeit, dies zu tun? Ich bin auf dem SQL Server 2005SQL Server - Verwendung von 'ALTER INDEX' mit Variablen als Parameter

Mein Code sieht wie folgt aus:

DECLARE @TABLENAME VARCHAR(256) 
DECLARE @IDXNAME VARCHAR(256) 
DECLARE @SCHEMAID INT 
SET @TABLENAME = 'T1' 
SET @IDXNAME = 'T1_IDX0' 
-- The next line is OK as it hardcodes the variable names 
ALTER INDEX T1_IDX0 ON T1 SET (ALLOW_PAGE_LOCKS = ON) 
-- The next line generates a syntax error 
ALTER INDEX @IDXNAME ON @TABLENAME SET (ALLOW_PAGE_LOCKS = ON) 

Die Syntaxfehler wie folgt aussieht:

Msg 102, Level 15, State 1, Line 7 
Incorrect syntax near '@IDXNAME'. 
Msg 156, Level 15, State 1, Line 7 
Incorrect syntax near the keyword 'SET'. 

Der eigentliche Code arbeite ich an ist komplexer als die oben genannten und in der Lage sein, Variablen zu verwenden, wäre nützlich. Ich denke, ein Weg, um es zu verwenden wäre dynamische SQL verwenden, aber ich würde wirklich lieber nicht, wenn ich es vermeiden könnte.

Antwort

9

Leider ist das, was Sie versuchen, nicht möglich. Die beste Problemumgehung, die ich vorschlagen kann, besteht darin, die alter-Anweisung als eine Zeichenfolge zu erstellen, die Variablen, die Sie in der Anweisung haben, zu verketten und dann exec() es.

versuchen, etwas wie folgt aus:

declare @alter varchar(200); 
set @alter = 'ALTER INDEX ' + @IDXNAME + ' ON ' + @TABLENAME + ' SET (ALLOW_PAGE_LOCKS = ON)'; 

exec(@alter); 
+0

Dank hatte ich ganz vergessen Sie einzelne Zeilen von SQL exec konnte (haben Sie einen SP oder etwas zu bauen hatte), so zu tun, was Sie vorschlagen, ist in Ordnung. Danke nochmal für deine Hilfe. – shearichard

+0

Mein Vergnügen, froh, dass ich helfen konnte :) –

Verwandte Themen