什么是TEXTIMAGE_ON ?

我在很多桌子上工作过,都有这样的事情:

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

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

来自MSDN

TEXTIMAGE_ON {filegroup | “default”}

指示文本,ntext,图像,xml,varchar(max),nvarchar(max),varbinary(max)和CLR用户定义的types列(包括几何和地理)存储在指定的文件组中。

如果表中没有大值列,则不允许TEXTIMAGE_ON。 如果指定了<partition_scheme>则不能指定TEXTIMAGE_ON。 如果指定了“default”,或者完全没有指定TEXTIMAGE_ON,则大值列将存储在默认文件组中。 在CREATE TABLE中指定的任何大值列数据的存储都不能被随后改变。

注意:在这种情况下,默认不是关键字。 它是默认文件组的标识符,必须用TEXTIMAGE_ON“default”或TEXTIMAGE_ON [default]进行分隔。 如果指定了“default”,则当前会话的QUOTED_IDENTIFIER选项必须为ON。 这是默认设置。

鉴于格式是

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

textimage是指所有大/无限大小的字段types:text,ntext,image,xml,varchar(max),nvarchar(max),varbinary(max)和CLR用户定义的types列(包括几何和地理)

然后,你需要知道什么文件和文件组。

从MSDN条目@ https://msdn.microsoft.com/en-us/library/ms189563.aspx

 File ------ At a minimum, every SQL Server database has two operating system files: a data file and a log file. Data files contain data and objects such as tables, indexes, stored procedures, and views. Log files contain the information that is required to recover all transactions in the database. Data files can be grouped together in filegroups for allocation and administration purposes. Filegroups ------ Every database has a primary filegroup. This filegroup contains the primary data file and any secondary files that are not put into other filegroups. User-defined filegroups can be created to group data files together for administrative, data allocation, and placement purposes. 

所以,

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

看起来有点多余,因为它是说所提到的大文本值列应该存储在主文件组中,这实际上是默认的动作。

假设存在一个名为CUSTOM的自定义文件组,你可能会这样写:

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

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

您可以这样做,以便您可以将核心关系数据模型(大概是磁盘空间相对较小)与大型磁盘(这将需要相对较多的磁盘空间)分离 – 以便允许不同的归档或复制策略应用于每个文件组。

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

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