sql-server – 将所有非群集索引移动到SQL Server中的另一个文件组

前端之家收集整理的这篇文章主要介绍了sql-server – 将所有非群集索引移动到SQL Server中的另一个文件组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
sql Server 2008中,我想将DB中的所有非群集索引移动到辅助文件组.最简单的方法是什么?

解决方法

运行此 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 scriptsql Server 2012上工作.我合并了他的更改.
>当表中有IGNORE_DUP_KEY选项时,程序将失败.没有修复这个.
> @srutzky指出,该过程不保证保留索引的顺序,并提出如何解决它的建议.我相应地更新了程序.
> ojiNY注意到过程中没有列出过滤器(与sql 2005兼容).根据他的建议,我把他们加入了.

猜你在找的MsSQL相关文章