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,但如果我能避免它,我真的不愿意.
不幸的是,你想做的事情是不可能的.我建议的最好的解决方法是将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)