0

我必须将一些表从主文件组移动到默认的主组。我有 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];

但我面临以下错误:

消息 1921,级别 16,状态 1,第 19 行无效的文件组“从 is_default=1 的 sys.filegroups 中选择名称”指定。

任何帮助都感激不尽。

4

1 回答 1

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;
于 2018-11-29T09:09:30.153 回答