2009-03-18 3 views
3

Utilisation de T-SQL J'ai trouvé que je ne pouvais pas utiliser 'ALTER INDEX' avec les valeurs table/index dans les variables sans avoir d'erreur de syntaxe. Y a-t-il un moyen de le faire? Je suis sur SQL Server 2005.SQL Server - comment utiliser 'ALTER INDEX' avec des variables comme paramètres

Mon code ressemble à ceci:

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) 

L'erreur de syntaxe ressemble à ceci:

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'. 

Le code réel je travaille est plus complexe que ce qui précède et être en mesure d'utiliser des variables serait utile. Je suppose que l'un des moyens serait d'utiliser le SQL dynamique mais je préférerais vraiment ne pas pouvoir l'éviter.

Répondre

9

Malheureusement, ce que vous essayez de faire n'est pas possible. La meilleure solution de contournement que je peux suggérer est de créer l'instruction alter sous la forme d'une chaîne, concaténer les variables que vous avez dans l'instruction, puis exec() il.

Essayez quelque chose comme ceci:

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

exec(@alter); 
+0

Merci j'avais oublié, vous pouvez exec simples lignes de SQL (pensé que vous deviez construire un SP ou quelque chose) faire ce que vous proposez est bien. Merci encore pour votre aide. – shearichard

+0

Mon plaisir, heureux je pourrais aider :) –

Questions connexes