SQL Server - 如何使用带有变量的'ALTER INDEX'作为参数

she*_*ard 3 t-sql sql-server sql-server-2005

使用T-SQL我发现我不能在变量中使用'ALTER INDEX'和表/索引值而不会出现语法错误.有什么方法可以做到这一点?我在SQL Server 2005上.

我的代码看起来像这样:

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)
Run Code Online (Sandbox Code Playgroud)

语法错误如下所示:

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'.
Run Code Online (Sandbox Code Playgroud)

我正在处理的真实代码比上面的代码更复杂,能够使用变量会很有用.我想有一种解决方法是使用动态SQL,但如果我能避免它,我真的不愿意.

And*_*are 9

不幸的是,你想做的事情是不可能的.我建议的最好的解决方法是将alter语句构建为字符串,连接语句中的变量,然后连接exec()它.

尝试这样的事情:

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

exec(@alter);
Run Code Online (Sandbox Code Playgroud)