Câu hỏi TEXTIMAGE_ON [PRIMARY] là gì?


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]

Những gì là TEXTIMAGE_ON [PRIMARY] trong SQL Server / Transact-SQL?


76
2017-09-11 09:56


gốc


msdn.microsoft.com/en-AU/library/ms174979.aspx CTRL + F "textimage" - ta.speot.is
bạn có thể đi theo tui điều này.. - IdontKnowEnglish


Các câu trả lời:


Từ MSDN

TEXTIMAGE_ON {filegroup | "mặc định" }

Cho biết văn bản, ntext, hình ảnh, xml, varchar (tối đa),   cột nvarchar (max), varbinary (max) và CLR do người dùng định nghĩa   (bao gồm cả hình học và địa lý) được lưu trữ trên các quy định   filegroup.

TEXTIMAGE_ON không được phép nếu không có cột giá trị lớn trong   bàn. Không thể chỉ định TEXTIMAGE_ON nếu <partition_scheme> Là   được chỉ định. Nếu "mặc định" được chỉ định, hoặc nếu TEXTIMAGE_ON không   quy định ở tất cả, các cột giá trị lớn được lưu trữ trong mặc định   filegroup. Lưu trữ bất kỳ dữ liệu cột giá trị lớn nào được chỉ định trong   CREATE TABLE không thể thay đổi sau đó.

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


42
2017-09-11 09:59



Không hiểu! - Mitul Sheth
@MitulSheth: - Điều gì không rõ ràng với bạn? Hướng dẫn sử dụng nói tất cả, nó được sử dụng để chỉ ra các loại được lưu trữ trong nhóm tập tin - Rahul Tripathi
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
@ R.T. Nó có nghĩa là chúng ta nên xác định nó bất cứ khi nào chúng ta sử dụng varchar (max)? Nếu chúng ta không làm gì? - Mitul Sheth
Như thường lệ, mô tả của Microsoft rõ ràng là nước sông Mississippi trong mùa xuân. - Suncat2000


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 có kích thước lớn / không giới hạn: văn bản, ntext, hình ảnh, xml, varchar (max), nvarchar (max), cột varbinary (max) và CLR do người dùng định nghĩa (bao gồm hình học và địa lý).

Sau đó, bạn cần biết Tập tin và Tập tin là gì. Từ mục 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à chế độ xem. Tệp nhật ký chứa thông tin được yêu cầu để phục hồi 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 phân bổ và quản trị.

Nhóm tệp

Mỗi cơ sở dữ liệu có một nhóm tệp chính. Tập tin 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. Các nhóm tệp do người dùng định nghĩa có thể được tạo ra để nhóm các tệp dữ liệu 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ẻ như hơi dư thừa, vì nó nói rằng các cột có 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ử sự tồn tại của một nhóm tập tin tùy chỉnh được gọi là CUSTOM, bạn có lẽ sẽ viết một cái gì đó như thế này:

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ữ 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 một tệp dữ liệu riêng biệt (trong nhóm tệp tùy chỉnh thứ cấp).

Bạn sẽ làm điều này để bạn có thể tách riêng datamodel quan hệ cốt lõi (có lẽ là tương đối nhỏ về không gian đĩa) từ các trường lớn (yêu cầu không gian đĩa 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 từng nhóm tệp.


118
2017-11-06 08:11



Cảm ơn bạn đã cung cấp nhiều câu trả lời dễ hiểu hơn so với câu trả lời được chấp nhận! - Zero3
Đúng, điều này đáng lẽ phải là câu trả lời được chấp nhận. - Scott Marlowe
@Mitul Sheth Không bao giờ quá muộn để chọn câu trả lời chính xác hơn :) - DaveBoltman


Nếu bạn không có bất kỳ cột văn bản lớn nào, ví dụ: văn bản, ntext, hình ảnh, xml, varchar (tối đa), nvarchar (tối đa), 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]

1
2017-10-19 05:45



Msg 156, Cấp 15, Tiểu bang 1, Dòng 12 Cú pháp không đúng gần từ khóa 'TABLE'. - DaveBoltman