TEXTIMAGE_ON [PRIMARY] là gì?


122

Tôi đã làm việc trên nhiều bảng và tất cả đều có điều này:

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

Là gì TEXTIMAGE_ON [PRIMARY]trong SQL Server / Transact-SQL?


bạn có thể theo dõi điều này ..
Pugal

Câu trả lời:


46

Từ MSDN

TEXTIMAGE_ON {nhóm tệp | "mặc định" }

Cho biết rằng các cột văn bản, ntext, hình ảnh, xml, varchar (max), nvarchar (max), varbinary (max) và CLR do người dùng xác định (bao gồm cả hình học và địa lý) được lưu trữ trên nhóm tệp được chỉ định.

TEXTIMAGE_ON không được phép nếu không có cột giá trị lớn nào trong bảng. Không thể chỉ định TEXTIMAGE_ON nếu <partition_scheme>được chỉ định. Nếu "mặc định" được chỉ định hoặc nếu TEXTIMAGE_ON hoàn toàn không được chỉ định, các cột giá trị lớn được lưu trữ trong nhóm tệp mặc định. Sau đó không thể thay đổi việc lưu trữ bất kỳ dữ liệu cột có giá trị lớn nào được chỉ định trong TẠO BẢNG.

LƯU Ý: Trong ngữ cảnh này, mặc định không phải là một từ khóa. Nó là số nhận dạng cho nhóm tệp mặc định và phải được phân tách, như trong TEXTIMAGE_ON "default" hoặc TEXTIMAGE_ON [default]. Nếu "mặc định" được chỉ định, tùy chọn QUOTED_IDENTIFIER phải được BẬT cho phiên hiện tại. Đây là thiết lập mặc định.


93
Không hiểu!
Mitul Sheth

3
@MitulSheth: - Bạn chưa rõ điều gì? Hướng dẫn nói tất cả, nó được sử dụng để chỉ ra các loại lưu trữ trong filegroup
Rahul Tripathi

12
Bất cứ ai có thể đưa ra một lời giải thích đơn giản. MSDN có vẻ hơi cao đối với tôi!
Mitul Sheth

4
@RT Có nghĩa là chúng ta nên chỉ định nó bất cứ khi nào chúng ta sử dụng varchar (max)? Nếu không thì sao?
Mitul Sheth

34
Như thường lệ, Microsoft mô tả rõ ràng như nước sông Mississippi vào mùa xuân.
Suncat2000

210

Cho rằng định dạng là:

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

TEXTIMAGE đề cập đến tất cả các loại trường kích thước lớn / không giới hạn: text, ntext, image, xml, varchar (max), nvarchar (max), varbinary (max) và các cột kiểu do người dùng xác định CLR (bao gồm cả hình học và địa lý).

Sau đó, bạn cần biết Tệp và Nhóm tệp là gì. Từ mục nhập MSDN trên Tệp cơ sở dữ liệu và Nhóm tệp :

Tập tin

Ở mức tối thiểu, mọi cơ sở dữ liệu SQL Server có hai tệp hệ điều hành: tệp dữ liệu và tệp nhật ký. Tệp dữ liệu chứa dữ liệu và các đối tượng như bảng, chỉ mục, thủ tục được lưu trữ và dạng xem. Các tệp nhật ký chứa thông tin cần thiết để khôi phục tất cả các giao dịch trong cơ sở dữ liệu. Các tệp dữ liệu có thể được nhóm lại với nhau trong các nhóm tệp cho mục đích cấp phát và quản trị.

Nhóm tệp

Mọi cơ sở dữ liệu đều có một nhóm tệp chính. Nhóm tệp này chứa tệp dữ liệu chính và bất kỳ tệp phụ nào không được đưa vào các nhóm tệp khác. Nhóm tệp do người dùng xác định có thể được tạo để nhóm các tệp dữ liệu lại với nhau cho các mục đích quản trị, phân bổ dữ liệu và vị trí.

Vì thế,

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

Có vẻ hơi thừa, vì người ta nói rằng các cột giá trị văn bản lớn được đề cập nên được lưu trữ trong nhóm tệp chính, đây thực sự là hành động mặc định.

Giả sử có sự tồn tại của một nhóm tệp tùy chỉnh được gọi là CUSTOM, bạn có thể viết một cái gì đó như sau:

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

Bạn sẽ tạo một nhóm tệp tùy chỉnh để lưu trữ tệp nhị phân hoặc văn bản lớn và trong trường hợp này, thông tin trường 'bình thường' sẽ nằm trong tệp dữ liệu trong nhóm tệp chính, trong khi các trường 'lớn' được liên kết sẽ được lưu trữ trong tệp dữ liệu riêng biệt về mặt vật lý (trong nhóm tệp tùy chỉnh phụ).

Bạn sẽ làm điều này để có thể tách mô hình dữ liệu quan hệ cốt lõi (có lẽ sẽ tương đối nhỏ về dung lượng đĩa) khỏi các trường lớn (sẽ yêu cầu nhiều dung lượng đĩa hơn tương ứng) - để cho phép các chiến lược lưu trữ hoặc sao chép riêng biệt để được áp dụng cho mỗi nhóm tệp.


39
Cảm ơn bạn đã cung cấp này nhiều câu trả lời dễ hiểu hơn so với cái chấp nhận!
Zero3

12
@Mitul Sheth Không bao giờ quá muộn để chọn một câu trả lời đúng hơn :)
Kỹ sư đảo ngược

1

Nếu bạn không có bất kỳ cột văn bản lớn nào tức là văn bản, ntext, hình ảnh, xml, varchar (max), nvarchar (max), varbinary (max) và CLR thì bạn chỉ có thể sử dụng:

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

2
Msg 156, Level 15, State 1, Line 12 Cú pháp không chính xác gần từ khóa 'TABLE'.
Reversed Engineer

@ReversedEngineer Lỗi cú pháp đó là do dấu phẩy không cần thiết ở cuối: [modified_by] [varchar](200) NULL
OrizG

@OrizG Chắc chắn rồi. Chỉ muốn giúp người viết câu trả lời để sửa mã mẫu của họ. Điều hoàn toàn kỳ lạ là nó không còn gây ra lỗi cú pháp trên máy của tôi nữa (Microsoft SQL Server 2016 (SP2-CU12) (KB4536648) - 13.0.5698.0 (X64))
Reversed Engineer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.