如何在 SQL 服务器中创建索引时动态附加文件组?

How to append filegroup dynamically while creating an index in SQL Server?

我必须将一些表从主文件组移动到默认素数组。我有 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 from sys.filegroups where is_default=1' specified.

任何帮助将不胜感激。

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

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;