Apa itu TEXTIMAGE_ON [PRIMARY]?

122

Saya mengerjakan banyak tabel dan semuanya memiliki hal ini:

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

Apa yang ada TEXTIMAGE_ON [PRIMARY]di SQL Server / Transact-SQL?

Mitul Sheth
sumber
Anda dapat mengikuti ini ..
Pugal

Jawaban:

46

Dari MSDN

TEXTIMAGE_ON {filegroup | "default"}

Menunjukkan bahwa teks, ntext, image, xml, varchar (max), nvarchar (max), varbinary (max), dan CLR tipe kolom yang ditentukan pengguna (termasuk geometri dan geografi) disimpan pada filegroup yang ditentukan.

TEXTIMAGE_ON tidak diperbolehkan jika tidak ada kolom nilai besar dalam tabel. TEXTIMAGE_ON tidak dapat ditentukan jika <partition_scheme>ditentukan. Jika "default" ditentukan, atau jika TEXTIMAGE_ON tidak ditentukan sama sekali, kolom nilai besar disimpan dalam grup file default. Penyimpanan data kolom bernilai besar yang ditentukan dalam CREATE TABLE tidak dapat diubah selanjutnya.

CATATAN: Dalam konteks ini, default bukanlah kata kunci. Ini adalah pengenal untuk grup file default dan harus dipisahkan, seperti di TEXTIMAGE_ON "default" atau TEXTIMAGE_ON [default]. Jika "default" ditentukan, opsi QUOTED_IDENTIFIER harus AKTIF untuk sesi saat ini. Ini adalah pengaturan default.

Rahul Tripathi
sumber
93
Tidak dipahami!
Mitul Sheth
3
@MitulSheth: - Apa yang tidak jelas bagi Anda? Manual menjelaskan semuanya, ini digunakan untuk menunjukkan jenis yang disimpan dalam filegroup
Rahul Tripathi
12
Adakah yang bisa memberi penjelasan sederhana. MSDN tampaknya agak tinggi bagi saya!
Mitul Sheth
4
@RT Apakah ini berarti bahwa kita harus menentukannya setiap kali kita menggunakan varchar (max)? Bagaimana jika kita tidak melakukannya?
Mitul Sheth
34
Seperti biasa, deskripsi Microsoft sejelas air Sungai Mississippi di musim semi.
Suncat2000
210

Mengingat formatnya adalah:

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

TEXTIMAGE mengacu pada semua jenis kolom ukuran besar / tidak terbatas: teks, ntext, gambar, xml, varchar (max), nvarchar (max), varbinary (max), dan jenis kolom yang ditentukan pengguna CLR (termasuk geometri dan geografi).

Kemudian, Anda perlu mengetahui apa itu Files dan FileGroups. Dari entri MSDN di File Database dan Filegroup :

Mengajukan

Minimal, setiap database SQL Server memiliki dua file sistem operasi: file data dan file log. File data berisi data dan objek seperti tabel, indeks, prosedur tersimpan, dan tampilan. File log berisi informasi yang diperlukan untuk memulihkan semua transaksi di database. File data dapat dikelompokkan bersama dalam filegroup untuk tujuan alokasi dan administrasi.

Filegroup

Setiap database memiliki filegroup utama. Grup file ini berisi file data primer dan file sekunder apa pun yang tidak dimasukkan ke grup file lain. Grup file yang ditentukan pengguna dapat dibuat untuk mengelompokkan file data bersama-sama untuk tujuan administrasi, alokasi data, dan penempatan.

Begitu,

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

Akan tampak agak berlebihan, karena dikatakan bahwa kolom nilai teks besar yang disebutkan harus disimpan dalam filegroup utama, yang sebenarnya merupakan tindakan default.

Dengan asumsi adanya grup file khusus yang disebut CUSTOM, Anda mungkin akan menulis sesuatu seperti ini:

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

Anda akan membuat grup file khusus untuk menyimpan biner atau teks besar, dan dalam hal ini info bidang 'normal' akan berada di file data di grup file utama, sedangkan bidang 'besar' terkait akan disimpan di file data yang berbeda secara fisik (di grup file kustom sekunder).

Anda akan melakukan ini sehingga Anda dapat memisahkan model data relasional inti (yang mungkin relatif kecil dalam hal ruang disk) dari bidang besar (yang akan membutuhkan lebih banyak ruang disk secara proporsional) - untuk memungkinkan pengarsipan yang berbeda atau strategi replikasi untuk diterapkan ke setiap grup file.

david.barkhuizen
sumber
39
Terima kasih telah memberikan jawaban yang jauh lebih mudah dimengerti daripada jawaban yang diterima!
Zero3
12
@Mitul Sheth Tidak ada kata terlambat untuk memilih jawaban yang benar lebih baik :)
Reversed Engineer
1

Jika Anda tidak memiliki kolom teks besar yaitu teks, ntext, gambar, xml, varchar (max), nvarchar (max), varbinary (max), dan CLR maka Anda dapat menggunakan:

CREATE TABLE Persons(
[id] [int] IDENTITY(1,1) NOT NULL,
[modified_on] [datetime] NULL,
[modified_by] [varchar](200) NULL,)ON [PRIMARY]
denford mutseriwa
sumber
2
Psn 156, Level 15, Status 1, Baris 12 Sintaks salah dekat kata kunci 'TABLE'.
Reversed Engineer
@ReversedEngineer Kesalahan sintaksis itu disebabkan oleh koma yang tidak perlu di akhir: [modified_by] [varchar](200) NULL
OrizG
@Oriya Yakin. Hanya ingin membantu penulis jawaban untuk memperbaiki kode sampel mereka. Hal yang benar-benar aneh adalah tidak lagi memberikan kesalahan sintaks pada mesin saya (Microsoft SQL Server 2016 (SP2-CU12) (KB4536648) - 13.0.5698.0 (X64))
Reversed Engineer