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