当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《SQLServer-如何使用带有变量的'ALTERINDEX'作为参数》经验,为你挑选了1个好方法。

使用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> Andrew Hare..:

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

尝试这样的事情:

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

exec(@alter);

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有