Що таке 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 {файлова група | "за замовчуванням"}

Вказує, що текст, ntext, зображення, xml, varchar (max), nvarchar (max), varbinary (max) та CLR, визначені користувачем, стовпці (включаючи геометрію та географію) зберігаються у визначеній групі файлів.

TEXTIMAGE_ON заборонено, якщо в таблиці немає стовпців великого значення. TEXTIMAGE_ON не можна вказати, якщо <partition_scheme>вказано. Якщо вказано "за замовчуванням" або TEXTIMAGE_ON взагалі не вказано, стовпці з великим значенням зберігаються у групі файлів за замовчуванням. Збереження будь-яких даних стовпців великого значення, зазначених у CREATE TABLE, не може бути згодом змінено.

ПРИМІТКА. У цьому контексті за замовчуванням це не ключове слово. Це ідентифікатор для групи файлів за замовчуванням і має бути обмеженим, як у TEXTIMAGE_ON "за замовчуванням" або TEXTIMAGE_ON [за замовчуванням]. Якщо вказано "за замовчуванням", для поточного сеансу опція QUOTED_IDENTIFIER повинна бути УВІМКНЕНО. Це налаштування за замовчуванням.


93
Не зрозумів!
Мітул Шет

3
@MitulSheth: - Що вам незрозуміло? Посібник говорить все це, він використовується для вказівки типів, що зберігаються у групі файлів
Rahul Tripathi

12
Хтось може дати просте пояснення. MSDN здається мені трохи високим!
Мітул Шет

4
@RT Це означає, що ми мусимо вказати його кожного разу, коли ми використовуємо varchar (max)? Що робити, якщо ми цього не зробимо?
Мітул Шет

34
Як завжди, опис Microsoft настільки чіткий, як і вода річки Міссісіпі навесні.
Suncat2000

209

Враховуючи, що формат такий:

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

TEXTIMAGE стосується всіх типів полів великого / необмеженого розміру: текст, ntext, зображення, 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
Дякуємо, що надали цю набагато зрозумілішу відповідь, ніж прийняту!
Нуль3

12
@Mitul Sheth Ніколи не пізно, щоб вибрати кращу правильну відповідь :)
Інженер з

1

Якщо у вас немає великих текстових стовпців, тобто текст, ntext, зображення, 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
Msg 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.