Что такое 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?


вы можете следить за этим ..
Пугал

Ответы:


46

Из MSDN

TEXTIMAGE_ON {файловая группа | "дефолт" }

Указывает, что столбцы типа text, ntext, image, xml, varchar (max), nvarchar (max), varbinary (max) и определяемого пользователем типа среды CLR (включая геометрию и географию) хранятся в указанной файловой группе.

TEXTIMAGE_ON не допускается, если в таблице нет столбцов с большими значениями. TEXTIMAGE_ON не может быть указан, если <partition_scheme>указан. Если указано значение «default» или если TEXTIMAGE_ON не указан вообще, столбцы с большими значениями сохраняются в файловой группе по умолчанию. Хранение любых данных столбца с большими значениями, указанное в CREATE TABLE, не может быть впоследствии изменено.

ПРИМЕЧАНИЕ. В этом контексте значение по умолчанию не является ключевым словом. Это идентификатор файловой группы по умолчанию, и он должен быть разделен, как в TEXTIMAGE_ON "default" или TEXTIMAGE_ON [default]. Если указано значение «default», параметр QUOTED_IDENTIFIER должен быть включен для текущего сеанса. Это значение по умолчанию.


93
Не понял!
Mitul Sheth

3
@MitulSheth: - Что вам непонятно? Руководство говорит само за себя, оно используется для обозначения типов, хранящихся в файловой группе
Рахул Трипати

12
Кто-нибудь может дать простое объяснение. MSDN мне кажется немного завышенным!
Mitul Sheth

4
@RT Означает ли это, что мы должны указывать его всякий раз, когда мы используем varchar (max)? Что, если мы этого не сделаем?
Mitul Sheth

34
Как обычно, описание в Microsoft ясно, как вода в реке Миссисипи весной.
Suncat2000

210

Учитывая, что формат такой:

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

TEXTIMAGE относится ко всем типам полей большого / неограниченного размера: text, ntext, image, xml, varchar (max), nvarchar (max), varbinary (max) и столбцы определяемого пользователем типа среды CLR (включая геометрию и географию).

Затем вам нужно знать, что такое файлы и файловые группы. Из записи MSDN в файлах базы данных и файловых группах :

файл

Как минимум, каждая база данных SQL Server имеет два файла операционной системы: файл данных и файл журнала. Файлы данных содержат данные и объекты, такие как таблицы, индексы, хранимые процедуры и представления. Файлы журнала содержат информацию, необходимую для восстановления всех транзакций в базе данных. Файлы данных могут быть сгруппированы в файловые группы для целей распределения и администрирования.

Файловые группы

Каждая база данных имеет первичную файловую группу. Эта файловая группа содержит первичный файл данных и любые вторичные файлы, которые не помещены в другие файловые группы. Пользовательские файловые группы могут быть созданы для группирования файлов данных в целях администрирования, распределения данных и размещения.

Так,

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 Неправильный синтаксис рядом с ключевым словом "ТАБЛИЦА".
Обратный инженер

@ReversedEngineer Эта синтаксическая ошибка вызвана ненужной запятой в конце: [modified_by] [varchar](200) NULL
OrizG

@OrizG Конечно. Просто хотел помочь автору ответа исправить свой пример кода. Совершенно странно то, что на моем компьютере больше не появляется синтаксическая ошибка (Microsoft SQL Server 2016 (SP2-CU12) (KB4536648) - 13.0.5698.0 (X64))
обратный инженер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.