代码之家  ›  专栏  ›  技术社区  ›  codeLover Sumit Tyagi

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

  •  0
  • codeLover Sumit Tyagi  · 技术社区  · 7 年前

    我必须将一些表从主文件组移到默认的主文件组。我有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'选择名称 从指定了“默认值=1”的sys.filegroups。

    任何帮助都将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Andrey Nikolov user3098458    7 年前

    为此需要使用动态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;
    
    推荐文章