什么是TEXTIMAGE_ON [PRIMARY]?


122

我在很多桌子上工作,所有东西都有:

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

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


您可以遵循 ..
Pugal

Answers:


46

MSDN

TEXTIMAGE_ON {文件组| “默认”}

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

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

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


93
不明白!
Mitul Sheth 2014年

3
@MitulSheth:-您不清楚什么?手册说明了一切,它用于指示文件组中存储的类型
Rahul Tripathi 2014年

12
谁能给一个简单的解释。MSDN对我来说似乎有点高!
Mitul Sheth 2014年

4
@RT是否意味着我们每当使用varchar(max)时都应指定它?如果我们不这样做怎么办?
Mitul Sheth 2014年

34
与往常一样,Microsoft的描述与春季的密西西比河水一样清晰。
Suncat2000

209

鉴于格式为:

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

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

然后,您需要知道什么是文件和文件组。从数据库文件和文件组的MSDN条目中:

文件

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

文件组

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

所以,

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

似乎有些多余,因为这是说上述大文本值列应存储在主文件组中,这实际上是默认操作。

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

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

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

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


39
感谢你们提供了这个比接受一个更容易理解的答案!
Zero3 '17

12
@Mitul Sheth永远不会太晚,不能选择一个更好的正确答案:)
逆向工程师

1

如果您没有任何较大的文本列,例如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]

2
消息156,级别15,状态1,第12行关键字“ TABLE”附近的语法错误。
逆向工程师

@ReversedEngineer该语法错误是由以下末尾的不必要逗号引起的 [modified_by] [varchar](200) NULL
OrizG

@OrizG当然。只是想帮助答案的作者修复示例代码。完全奇怪的是,它不再给我的机器带来语法错误(Microsoft SQL Server 2016(SP2-CU12)(KB4536648)-13.0.5698.0(X64))
反向工程师
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.