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 {filegroup | "ค่าเริ่มต้น" }

ระบุว่าข้อความ, ntext, รูปภาพ, xml, varchar (สูงสุด), nvarchar (สูงสุด), varbinary (สูงสุด) และคอลัมน์ประเภทที่ผู้ใช้กำหนดเอง CLR (รวมถึงเรขาคณิตและภูมิศาสตร์) ถูกเก็บไว้ในกลุ่มไฟล์ที่ระบุ

TEXTIMAGE_ON ไม่ได้รับอนุญาตหากไม่มีคอลัมน์ค่าขนาดใหญ่ในตาราง ไม่สามารถระบุ TEXTIMAGE_ON ได้หาก<partition_scheme>ระบุไว้ หากระบุ "ค่าเริ่มต้น" หรือหากไม่ได้ระบุ TEXTIMAGE_ON เลยคอลัมน์ค่าขนาดใหญ่จะถูกเก็บไว้ในกลุ่มไฟล์เริ่มต้น การจัดเก็บข้อมูลคอลัมน์ค่าขนาดใหญ่ที่ระบุใน CREATE TABLE ไม่สามารถเปลี่ยนแปลงได้ในภายหลัง

หมายเหตุ: ในบริบทนี้ค่าเริ่มต้นไม่ใช่คำสำคัญ เป็นตัวระบุสำหรับกลุ่มไฟล์เริ่มต้นและต้องคั่นด้วยเช่นใน TEXTIMAGE_ON "default" หรือ TEXTIMAGE_ON [ค่าเริ่มต้น] หากระบุ "ค่าเริ่มต้น" ตัวเลือก QUOTED_IDENTIFIER จะต้องเปิดสำหรับเซสชันปัจจุบัน นี่คือการตั้งค่าเริ่มต้น.


93
ไม่เข้าใจ!
Mitul Sheth

3
@MitulSheth: - อะไรที่คุณไม่ชัดเจน? คู่มือพูดทั้งหมดใช้เพื่อระบุประเภทที่จัดเก็บใน filegroup
Rahul Tripathi

12
ใครสามารถให้คำอธิบายง่ายๆ MSDN ค่อนข้างสูงสำหรับฉัน!
Mitul Sheth

4
@RT หมายความว่าเราควรระบุเมื่อใดก็ตามที่เราใช้ varchar (สูงสุด)? ถ้าเราไม่ทำล่ะ?
Mitul Sheth

34
ตามปกติคำอธิบายของ Microsoft นั้นชัดเจนเหมือนกับน้ำในแม่น้ำมิสซิสซิปปีในฤดูใบไม้ผลิ
Suncat2000

210

ระบุว่ารูปแบบคือ:

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

TEXTIMAGE หมายถึงประเภทฟิลด์ขนาดใหญ่ / ไม่ จำกัด ทั้งหมด: ข้อความ, ntext, รูปภาพ, xml, varchar (สูงสุด), nvarchar (สูงสุด), varbinary (สูงสุด) และคอลัมน์ประเภทที่ผู้ใช้กำหนด CLR (รวมถึงรูปทรงเรขาคณิตและภูมิศาสตร์)

จากนั้นคุณต้องรู้ว่าไฟล์และกลุ่มไฟล์คืออะไร จากรายการ MSDN บนไฟล์ฐานข้อมูลและกลุ่มไฟล์ :

ไฟล์

อย่างน้อยที่สุดฐานข้อมูล SQL Server ทุกแห่งจะมีไฟล์ระบบปฏิบัติการสองไฟล์คือไฟล์ข้อมูลและไฟล์บันทึก ไฟล์ข้อมูลประกอบด้วยข้อมูลและวัตถุเช่นตารางดัชนีกระบวนงานที่จัดเก็บและมุมมอง ไฟล์บันทึกมีข้อมูลที่จำเป็นในการกู้คืนธุรกรรมทั้งหมดในฐานข้อมูล ไฟล์ข้อมูลสามารถจัดกลุ่มเข้าด้วยกันในกลุ่มไฟล์เพื่อวัตถุประสงค์ในการจัดสรรและการดูแลระบบ

filegroups

ทุกฐานข้อมูลมีกลุ่มไฟล์หลัก กลุ่มไฟล์นี้มีไฟล์ข้อมูลหลักและไฟล์รองใด ๆ ที่ไม่ได้ใส่ไว้ในกลุ่มไฟล์อื่น กลุ่มไฟล์ที่ผู้ใช้กำหนดเองสามารถสร้างขึ้นเพื่อจัดกลุ่มไฟล์ข้อมูลเข้าด้วยกันเพื่อการดูแลระบบการจัดสรรข้อมูลและการจัดวาง

ดังนั้น,

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

ดูเหมือนว่าจะค่อนข้างซ้ำซ้อนเนื่องจากมีการกล่าวว่าควรจัดเก็บคอลัมน์ขนาดใหญ่ที่มีข้อความ - ค่าไว้ในกลุ่มไฟล์หลักซึ่งเป็นการกระทำเริ่มต้น

สมมติว่ามีกลุ่มไฟล์แบบกำหนดเองที่เรียกว่า CUSTOM คุณอาจจะเขียนดังนี้:

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

คุณจะต้องสร้างกลุ่มไฟล์ที่กำหนดเองเพื่อจัดเก็บไบนารีหรือข้อความขนาดใหญ่และในกรณีนี้ข้อมูลฟิลด์ "ปกติ" จะอยู่ในไฟล์ข้อมูลในกลุ่มไฟล์หลักในขณะที่ฟิลด์ "ใหญ่" ที่เกี่ยวข้องจะถูกเก็บไว้ในไฟล์ข้อมูลที่แตกต่างกันทางกายภาพ (ในกลุ่มไฟล์ที่กำหนดเองรอง)

คุณจะทำเช่นนี้เพื่อให้คุณสามารถแยกโมเดลข้อมูลเชิงสัมพันธ์หลัก (ซึ่งน่าจะมีขนาดค่อนข้างเล็กในแง่ของเนื้อที่ดิสก์) จากฟิลด์ขนาดใหญ่ (ซึ่งจะต้องใช้พื้นที่ดิสก์มากขึ้นตามสัดส่วน) เพื่อให้สามารถใช้กลยุทธ์การจัดเก็บถาวรหรือการจำลองแบบที่แตกต่างกันได้ นำไปใช้กับแต่ละกลุ่มไฟล์


39
ขอบคุณสำหรับการให้บริการนี้มากคำตอบที่เข้าใจมากขึ้นกว่าที่ได้รับการยอมรับ!
Zero3

12
@ Mitul Sheth ไม่สายเกินไปที่จะเลือกคำตอบที่ถูกต้องดีกว่า :)
Reversed Engineer

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'
Reversed Engineer

@ReversedEngineer ข้อผิดพลาดทางไวยากรณ์นั้นเกิดจากเครื่องหมายจุลภาคที่ไม่จำเป็นในตอนท้ายของ: [modified_by] [varchar](200) NULL
OrizG

@OrizG ชัวร์. แค่ต้องการช่วยผู้เขียนคำตอบในการแก้ไขโค้ดตัวอย่าง สิ่งที่แปลกโดยสิ้นเชิงคือไม่มีข้อผิดพลาดทางไวยากรณ์ในเครื่องของฉันอีกต่อไป (Microsoft SQL Server 2016 (SP2-CU12) (KB4536648) - 13.0.5698.0 (X64))
Reversed Engineer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.