SQL Server - как использовать «ALTER INDEX» с переменными в качестве параметров - PullRequest
3 голосов
/ 18 марта 2009

Используя 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, но я бы предпочел не делать этого, если бы мог избежать этого.

1 Ответ

9 голосов
/ 18 марта 2009

К сожалению, то, что вы пытаетесь сделать, невозможно. Лучший обходной путь, который я могу предложить, - это построить оператор alter в виде строки, объединить переменные, которые есть в выражении, а затем exec() it.

Попробуйте что-то вроде этого:

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

exec(@alter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...