使用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)
语法错误如下所示:
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'.
我正在处理的真实代码比上面的代码更复杂,能够使用变量会很有用.我想有一种解决方法是使用动态SQL,但如果我能避免它,我真的不愿意.
不幸的是,你想做的事情是不可能的.我建议的最好的解决方法是将alter
语句构建为字符串,连接语句中的变量,然后连接exec()
它.
尝试这样的事情:
declare @alter varchar(200); set @alter = 'ALTER INDEX ' + @IDXNAME + ' ON ' + @TABLENAME + ' SET (ALLOW_PAGE_LOCKS = ON)'; exec(@alter);