【问题标题】:How to append filegroup dynamically while creating an index in SQL Server?在 SQL Server 中创建索引时如何动态附加文件组?
【发布时间】:2018-11-29 09:00:52
【问题描述】:

我必须将一些表从主文件组移动到默认的主组。我有 3 个不同的环境,每个环境中默认文件组的名称都不同。因此,我可以将默认文件组名称获取为:

select name from sys.filegroups where is_default=1;

现在在重新创建我的索引时,我想使用上述查询的输出来指定我想要创建索引的文件组(因为默认文件组在不同的环境中具有不同的名称,因此,我只想要一个查询被提升)。我试过:

CREATE UNIQUE CLUSTERED INDEX PK_INDEX
ON slam.MY_TABLE(COL_1)
WITH (DROP_EXISTING=ON) ON [select name from sys.filegroups where is_default=1];

但我面临以下错误:

Msg 1921, Level 16, State 1, Line 19 Invalid filegroup 'select name 来自指定了 is_default=1' 的 sys.filegroups。

任何帮助将不胜感激。

【问题讨论】:

  • 默认情况下,您创建的任何表或索引都将存储在默认文件组中。你不需要在这里做任何特别的事情 - 只需删除 FG 部分。
  • 问题是已经创建了一个新的文件组,它被标记为默认值。表和索引是在创建文件组之前创建的。我只想将表从 PRIMARY 文件组转移到新创建的默认文件组

标签: sql-server subquery filegroup


【解决方案1】:

您需要为此使用动态 sql。选择默认文件组的名称,构建查询并像这样执行它:

declare @fg_name nvarchar(250), @sql nvarchar(max);
select @fg_name = name from sys.filegroups where is_default=1;
set @sql = N'CREATE UNIQUE CLUSTERED INDEX PK_INDEX
    ON slam.MY_TABLE(COL_1)
    WITH (DROP_EXISTING=ON) ON [' + @fg_name + N'];';
exec sp_executesql @sql;

【讨论】:

  • 单次查询没有办法做到吗?
  • 我不这么认为。不过,您可以将构建查询和选择文件组名称组合到单个查询中。但是为什么要成为单个查询呢?
  • 因为我不确定是否按照组织标准允许我使用动态 sql qill
  • 好的,那为什么不直接省略文件组名。它应该是默认的。
  • 不,不会的
猜你喜欢
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
相关资源
最近更新 更多