解决方法
运行此
updated script创建一个名为MoveIndexToFileGroup的存储过程.此过程将表上的所有非聚集索引移动到指定的文件组.它甚至支持一些其他脚本不包含INCLUDE列.此外,它不会重建或移动已经在所需文件组上的索引.创建该过程后,调用它:
EXEC MoveIndexToFileGroup @DBName = '<your database name>',@SchemaName = '<schema name that defaults to dbo>',@ObjectNameList = '<a table or list of tables>',@IndexName = '<an index or NULL for all of them>',@FileGroupName = '<the target file group>';
要创建一个脚本,将为数据库中的每个表运行此脚本,将查询输出切换为文本,然后运行以下命令:
SELECT 'EXEC MoveIndexToFileGroup ''' +TABLE_CATALOG+''',''' +TABLE_SCHEMA+''',''' +TABLE_NAME+''',NULL,''the target file group'';' +char(13)+char(10) +'GO'+char(13)+char(10) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA,TABLE_NAME;
详情请参考原版blog.我没有写这个程序,但是根据博客的回复进行了更新,并确认它可以在sql Server 2005和2008上运行.
更新
> @psteffek modified the script在sql Server 2012上工作.我合并了他的更改.
>当表中有IGNORE_DUP_KEY选项时,程序将失败.没有修复这个.
> @srutzky指出,该过程不保证保留索引的顺序,并提出如何解决它的建议.我相应地更新了程序.
> ojiNY注意到过程中没有列出过滤器(与sql 2005兼容).根据他的建议,我把他们加入了.