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

回答:


46

MSDNから

TEXTIMAGE_ON {ファイルグループ| "デフォルト" }

text、ntext、image、xml、varchar(max)、nvarchar(max)、varbinary(max)、およびCLRユーザー定義型列(geometryとgeographyを含む)が指定したファイルグループに格納されることを示します。

テーブルに大きな値の列がない場合、TEXTIMAGE_ONは許可されません。が指定されている場合、TEXTIMAGE_ONは指定できません<partition_scheme>。"default"が指定されている場合、またはTEXTIMAGE_ONがまったく指定されていない場合、大きな値の列は既定のファイルグループに格納されます。CREATE TABLEで指定された大きな値の列データのストレージは、後で変更できません。

注:このコンテキストでは、デフォルトはキーワードではありません。これは、デフォルトのファイルグループの識別子であり、TEXTIMAGE_ON "default"またはTEXTIMAGE_ON [default]のように区切る必要があります。「デフォルト」を指定する場合、現在のセッションではQUOTED_IDENTIFIERオプションをONにする必要があります。これがデフォルトの設定です。


93
理解されていない!
Mitul Sheth 2014

3
@MitulSheth:-あなたにはっきりしないことは何ですか?マニュアルはそれをすべて話します、それはファイルグループに保存されたタイプを示すために使用されます
Rahul Tripathi

12
誰でも簡単に説明できますか?MSDNは私には少し高いようです!
Mitul Sheth 2014

4
@RT varchar(max)を使用する場合は常に指定する必要があるという意味ですか?そうしないとどうなりますか?
Mitul Sheth 2014

34
いつものように、マイクロソフトの説明は春のミシシッピ川の水と同じくらい明確です。
Suncat2000 2017

209

形式は次のとおりです。

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

TEXTIMAGE すべての大きな/無制限のサイズのフィールドタイプを参照します:text、ntext、image、xml、varchar(max)、nvarchar(max)、varbinary(max)、およびCLRユーザー定義型列(ジオメトリと地理を含む)。

次に、ファイルとファイルグループが何であるかを知る必要があります。データベースファイルとファイルグループに関するMSDNエントリから:

ファイル

少なくとも、すべてのSQL Serverデータベースには、データファイルとログファイルの2つのオペレーティングシステムファイルがあります。データファイルには、テーブル、インデックス、ストアドプロシージャ、ビューなどのデータとオブジェクトが含まれています。ログファイルには、データベース内のすべてのトランザクションを回復するために必要な情報が含まれています。データファイルは、割り当てと管理の目的でファイルグループにグループ化できます。

ファイルグループ

すべてのデータベースにはプライマリファイルグループがあります。このファイルグループには、プライマリデータファイルと、他のファイルグループに入れられないセカンダリファイルが含まれています。ユーザー定義のファイルグループを作成して、管理、データ割り当て、および配置の目的でデータファイルをグループ化できます。

そう、

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

前述の大きなテキスト値の列は、実際には既定のアクションであるプライマリファイルグループ内に格納する必要があると言っているため、多少冗長であるように見えます。

CUSTOMと呼ばれるカスタムファイルグループが存在する場合、おそらく次のように記述します。

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

大きなバイナリまたはテキストを格納するカスタムファイルグループを作成します。この場合、「通常」のフィールド情報はプライマリファイルグループのデータファイルに配置され、関連する「大きな」フィールドは物理的に異なるデータファイルに格納されます。 (セカンダリカスタムファイルグループ内)。

これを行うと、コアリレーショナルデータモデル(ディスクスペースの点では比較的小さいと思われます)を大きなフィールド(比例してより多くのディスクスペースが必要になります)から分離できるようになります。各ファイルグループに適用されます。


39
承認された回答よりもはるかに理解しやすい回答を提供していただきありがとうございます。
Zero3

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))
エンジニア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.