Sql server 如何在SQL Server中创建索引时动态追加文件组?
我必须将一些表从主文件组移动到默认主文件组。我有3个不同的环境,每个环境中默认文件组的名称都不同。因此,我可以获取默认文件组名,如下所示:Sql server 如何在SQL Server中创建索引时动态追加文件组?,sql-server,subquery,filegroup,Sql Server,Subquery,Filegroup,我必须将一些表从主文件组移动到默认主文件组。我有3个不同的环境,每个环境中默认文件组的名称都不同。因此,我可以获取默认文件组名,如下所示: select name from sys.filegroups where is_default=1; 现在,在重新创建索引时,我希望使用上述查询的输出来指定要在其中创建索引的文件组(因为默认文件组在不同的环境中具有不同的名称,因此,我只希望提升单个查询)。我试着: CREATE UNIQUE CLUSTERED INDEX PK_INDEX ON sla
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,第16级,状态1,第19行无效文件组“选择名称”
来自sys.filegroups,其中指定了_default=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;
没有办法在一个查询中完成它?我不这么认为。不过,您可以将构造查询和选择文件组名称合并到单个查询中。但是为什么要成为单个查询呢?因为我不确定根据组织标准SOK是否允许我使用动态sql qill,那么为什么不省略文件组名呢。默认情况下,您创建的任何表或索引都将存储在默认文件组中。您不需要在此处执行任何特殊操作-只需删除FG部分。问题是已创建一个新的文件组,该文件组已标记为默认。表和索引是在创建文件组之前创建的。我只想将表从主文件组转移到新创建的默认文件组