3 题: 什么是TEXTIMAGE_ON [PRIMARY]?

在...创建的问题 Tue, Jun 30, 2015 12:00 AM

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

 
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]是什么?

    
98
  1. 你可以按照中..
    2018-05-26 10:45:08Z
  2. 醇>
    3答案                              3 跨度>                         

    来自 MSDN

      

    TEXTIMAGE_ON {filegroup | “默认”}

         

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

         

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

         

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

        
    40
    2014-12-04 11:27:03Z
    1. 不明白!
      2014-09-11 10:06:21Z
    2. @ MitulSheth: - 你还不清楚什么?手册说明了一切,它用于指示存储在文件组
      中的类型
      2014-09-11 10:16:35Z
    3. 任何人都可以给出一个简单的解释。 MSDN对我来说似乎有点高!
      2014-09-11 10:17:09Z
    4. @ R.T。这是否意味着我们应该在每次使用varchar(max)时指定它?如果我们不怎么办?
      2014-09-11 10:18:15Z
    5. 像往常一样,微软的描述与春天的密西西比河水一样清晰。
      2017-07-12 19:37:36Z
    6. 醇>

    鉴于格式为:

     
    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]
    

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

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

        
    160
    2017-12-28 08:41:37Z
    1. 感谢您提供这个很多比可接受的答案更容易理解的答案!
      2017-04-12 15:00:18Z
    2. 是的,这应该是接受的答案。
      2017-07-14 19:01:13Z
    3. @ Mitul Sheth永远不会太晚,无法选择更正确的答案:)
      2017-09-20 16:54:27Z
    4. 醇>

    如果您没有任何大型文本列,即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]
    
        
    0
    2016-10-19 05:45:20Z
    1. 消息156,级别15,状态1,行12关键字“TABLE”附近的语法不正确。
      2017-09-20 16:54:59Z
    2. 醇>
来源放置 这里