在特定FileGroup WHERE 1 = 2下创建表

时间:2016-04-12 13:01:47

标签: sql sql-server tsql select-into

我有一个WinForms应用程序,它根据给定的表动态创建表,例如:

SELECT * INTO TempTable FROM MyTable WHERE 1=2

我希望使用上述语法在特定Temp tables下创建filegroup

在文件组下创建表的语法是:

CREATE TABLE [dbo].[TempTable](

            [RECORDID] [numeric](10, 0) NOT NULL,
            --etc etc

) ON [TempFileGroup] TEXTIMAGE_ON [TempFileGroup]

是否可以使用上面的语法在特定文件组下创建表?

2 个答案:

答案 0 :(得分:1)

  

我希望使用上述语法在特定文件组下创建这些Temp表

SQL Server 2017+开始,您可以使用ON filegroup语法。

  

<强> INTO clause

     

SELECT ... INTO 在默认文件组中创建一个新表,并将查询中的结果行插入其中。

[ INTO new_table ]
[ ON filegroup]
     

<强>文件组

     

指定将在其中创建新表的文件组的名称。指定的文件组应存在于数据库中,否则SQL Server引擎会引发错误。仅从SQL Server 2017开始支持此选项。

来自MSDN的示例:

将新表创建为另一个表的副本并将其加载到指定的文件组

ALTER DATABASE [AdventureWorksDW2016] ADD FILEGROUP FG2;
ALTER DATABASE [AdventureWorksDW2016]
ADD FILE
(
NAME='FG2_Data',
FILENAME = '/var/opt/mssql/data/AdventureWorksDW2016_Data1.mdf'
)
TO FILEGROUP FG2;
GO
SELECT *  INTO [dbo].[FactResellerSalesXL] ON FG2 from [dbo].[FactResellerSales]

答案 1 :(得分:0)

BOL表示

  

SELECT ... INTO在默认文件组

中创建一个新表

(强调添加)

因此,除非您可以使用下面的参数语法找到创建的表和alter it,否则将在默认文件组中创建新创建的表。

  

移动到{partition_scheme_name(column_name [1,... n])|文件组| “默认”}

     

适用于:SQL Server 2008到SQL Server 2016,SQL Database V12。

     

指定移动当前位于聚簇索引的叶级别中的数据行的位置。该表将移动到新位置。此选项仅适用于创建聚簇索引的约束。