Sql server SQL Server-如何使用';更改索引';以变量为参数

Sql server SQL Server-如何使用';更改索引';以变量为参数,sql-server,sql-server-2005,tsql,Sql Server,Sql Server 2005,Tsql,使用T-SQL,我发现在变量中的表/索引值中使用“ALTER INDEX”时会出现语法错误。有没有办法做到这一点?我使用的是SQLServer2005 我的代码如下所示: 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 hard

使用T-SQL,我发现在变量中的表/索引值中使用“ALTER INDEX”时会出现语法错误。有没有办法做到这一点?我使用的是SQLServer2005

我的代码如下所示:

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'.
语法错误如下所示:

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);

谢谢,我忘了你可以执行一行SQL(以为你必须构建一个SP或其他东西),所以按照你的建议去做是可以的。再次感谢您的帮助。我很高兴,很高兴我能帮忙:)