Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQL Server中创建索引时动态追加文件组?_Sql Server_Subquery_Filegroup - Fatal编程技术网

Sql server 如何在SQL Server中创建索引时动态追加文件组?

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

我必须将一些表从主文件组移动到默认主文件组。我有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,第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部分。问题是已创建一个新的文件组,该文件组已标记为默认。表和索引是在创建文件组之前创建的。我只想将表从主文件组转移到新创建的默认文件组