2009-03-18 6 views
3

T-SQLを使用する構文エラーが発生することなく変数のテーブル/インデックス値で 'ALTER INDEX'を使用できないことがわかりました。これは何らかの方法で行えますか? I 2005年SQL Server - パラメータとして変数に 'ALTER INDEX'を使用する方法

私のコードは次のようになりますSQL Server上だ:

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

私が働いている実際のコードはより複雑である:構文エラーは、次のようになります

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) 

変数を使用することができれば便利です。私はそれを回避する方法の1つは、動的SQLを使用するだろうと思うが、私はそれを避けることができれば本当にむしろ。

答えて

9

残念ながら、あなたがしようとしていることはできません。私が提案できる最良の回避策は、alterステートメントを文字列として作成し、ステートメント内にある変数を連結してからexec()にすることです。このような

てみてください何か:私はあなたがSQLの単一の行をexecし可能性が忘れてい

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

exec(@alter); 
+0

おかげであなたは罰金であることを示唆している何を(あなたがSPか何かを構築するために思っていました)。あなたの助けをもう一度ありがとう。 – shearichard

+0

私の喜び、私が助けることができてうれしい:) –

関連する問題