【问题标题】:Create table under a specific FileGroup WHERE 1=2在特定文件组下创建表 WHERE 1=2
【发布时间】:2016-04-12 13:01:47
【问题描述】:

我有一个 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]

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

【问题讨论】:

  • 我必须在这里遗漏一些简单的细节:1 ever 什么时候等于 2?
  • @levelonehuman 我认为电影露西解释了这一点。
  • @ColinMackay 好吧,我要么太年轻,要么太隐蔽,要么两者兼而有之,无法获得参考。编辑:我太隐蔽了。
  • SQL Server 允许表变量和临时表。为什么不简单地使用它们?
  • @levelonehuman 该语法基于您现有的表 (MyTable) 创建一个新表 (temp)。它复制了相同的结构。

标签: sql sql-server tsql select-into


【解决方案1】:

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

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]

【讨论】:

    【解决方案2】:

    BOL 声明

    SELECT...INTO 在默认文件组

    中创建一个新表

    (强调)

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2021-12-26
      • 2014-03-21
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多