TEXTIMAGE_ON [ PRIMARY ]是什么?

我在很多桌子上工作过,每个桌子上都有这个东西:

CREATE TABLE Persons(
[id] [int] IDENTITY(1,1) NOT NULL,
[modified_on] [datetime] NULL,
[modified_by] [varchar](200) NULL,
)
ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

什么是 SQLServer/Transact-SQL 中的 TEXTIMAGE_ON [PRIMARY]

125149 次浏览

来自 MSDN

TEXTIMAGE _ ON { filegroup | “ default”}

指示 text、 ntext、 image、 xml、 varchar (max) , Nvarchar (max)、 varbinary (max)和 CLR 用户定义类型列 (包括几何和地理)存储在指定的 文件组。

控件中没有大值列,则不允许 TEXTIMAGE _ ON 如果 <partition_scheme>为。则不能指定 TEXTIMAGE _ ON 如果指定了“ default”,或者没有指定 TEXTIMAGE _ ON 指定,则大值列存储在默认 中指定的任何大值列数据的存储 不能随后更改 CREATETABLE。

注意: 在此上下文中,default 不是关键字。它是默认文件组的标识符,必须加以分隔,如 TEXTIMAGE _ ON“ default”或 TEXTIMAGE _ ON [ default ]中所示。如果指定了“ default”,则当前会话的 QUOTED _ IDENTIFIER 选项必须为 ON。这是默认设置。

鉴于格式如下:

CREATE TABLE TableName(...) TEXTIMAGE_ON { filegroup | "default" }

TEXTIMAGE引用所有大/无限大字段类型: text、 ntext、 image、 xml、 varchar (max)、 nvarchar (max)、 varbinar (max)和 CLR 用户定义的类型列(包括几何和地理)。

然后,您需要知道文件和文件组是什么:

档案

每个 SQLServer 数据库至少有两个操作系统文件: 一个数据文件和一个日志文件。数据文件包含数据和对象,如表、索引、存储过程和视图。日志文件包含恢复数据库中所有事务所需的信息。为了进行分配和管理,可以将数据文件分组到文件组中。

文件组

每个数据库都有一个主文件组。此文件组包含主数据文件和任何未放入其他文件组的辅助文件。可以创建用户定义的文件组来将数据文件组合在一起,以便进行管理、数据分配和放置。

那么,

CREATE TABLE ... ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

似乎有些多余,因为它表示所提到的大文本值列应该存储在主文件组中,而主文件组实际上是默认操作。

假设存在一个名为 CUSTOM 的自定义文件组,您可能会编写如下代码:

CREATE TABLE ... ON [PRIMARY] TEXTIMAGE_ON [CUSTOM]

您将创建一个自定义文件组来存储大型二进制文件或文本,在这种情况下,“普通”字段信息将位于主文件组中的数据文件中,而相关的“大”字段将存储在物理上不同的数据文件中(在辅助自定义文件组中)。

这样做是为了将核心关系数据模型(就磁盘空间而言可能相对较小)与大字段(相应地需要更多磁盘空间)分离开来,以便允许对每个文件组应用不同的归档或复制策略。

如果您没有任何大的文本列,比如 text、 ntext、 image、 xml、 varchar (max)、 nvarchar (max)、 varbinar (max)和 CLR,那么您可以使用:

CREATE TABLE Persons(
[id] [int] IDENTITY(1,1) NOT NULL,
[modified_on] [datetime] NULL,
[modified_by] [varchar](200) NULL,)ON [PRIMARY]