TEXTIMAGE_ON [PRIMARY] nedir?


122

Birçok masa üzerinde çalıştım ve hepsinde şu şey vardı:

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'de neler var ?


Eğer takip edebilirsiniz bu ..
Pugal

Yanıtlar:


46

Gönderen MSDN

TEXTIMAGE_ON {dosya grubu | "varsayılan" }

Text, ntext, image, xml, varchar (max), nvarchar (max), varbinary (max) ve CLR kullanıcı tanımlı tür sütunlarının (geometri ve coğrafya dahil) belirtilen dosya grubunda depolandığını belirtir.

Tabloda büyük değer sütunları yoksa TEXTIMAGE_ON'a izin verilmez. TEXTIMAGE_ON belirtilirse <partition_scheme>belirtilemez. "Varsayılan" belirtilirse veya TEXTIMAGE_ON hiç belirtilmezse, büyük değerli sütunlar varsayılan dosya grubunda saklanır. CREATE TABLE'da belirtilen herhangi bir büyük değerli sütun verilerinin depolanması daha sonra değiştirilemez.

NOT: Bu bağlamda, varsayılan bir anahtar sözcük değildir. Varsayılan dosya grubu için bir tanımlayıcıdır ve TEXTIMAGE_ON "varsayılan" veya TEXTIMAGE_ON [varsayılan] 'da olduğu gibi sınırlandırılmalıdır. "Varsayılan" belirtilmişse, QUOTED_IDENTIFIER seçeneği mevcut oturum için AÇIK olmalıdır. Bu varsayılan ayardır.


93
Anlaşılmadı!
Mitul Sheth

3
@MitulSheth: - Sizin için net olmayan nedir? Kılavuz her şeyi
anlatıyor

12
Herkes basit bir açıklama yapabilir. MSDN benim için biraz yüksek görünüyor!
Mitul Sheth

4
@RT varchar (max) kullandığımızda bunu belirtmemiz gerektiği anlamına mı geliyor? Ya yapmazsak?
Mitul Sheth

34
Her zamanki gibi, Microsoft'un açıklaması Mississippi Nehri'nin bahardaki suyu kadar nettir.
Suncat2000

210

Biçim şu şekildedir:

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

TEXTIMAGE tüm büyük / sınırsız boyutlu alan türlerini ifade eder: text, ntext, image, xml, varchar (max), nvarchar (max), varbinary (max) ve CLR kullanıcı tanımlı tür sütunları (geometri ve coğrafya dahil).

Ardından, Dosya ve Dosya Gruplarının ne olduğunu bilmeniz gerekir. Veritabanı Dosyaları ve Dosya Grupları üzerindeki MSDN girişinden :

Dosya

En azından, her SQL Server veritabanında iki işletim sistemi dosyası bulunur: bir veri dosyası ve bir günlük dosyası. Veri dosyaları; tablolar, dizinler, depolanmış prosedürler ve görünümler gibi verileri ve nesneleri içerir. Günlük dosyaları, veritabanındaki tüm işlemleri kurtarmak için gereken bilgileri içerir. Veri dosyaları, ayırma ve yönetim amaçları için dosya gruplarında birlikte gruplanabilir.

Filegroups

Her veritabanının bir birincil dosya grubu vardır. Bu dosya grubu, birincil veri dosyasını ve diğer dosya gruplarına konulmayan ikincil dosyaları içerir. Veri dosyalarını yönetim, veri ayırma ve yerleştirme amaçlarıyla birlikte gruplamak için kullanıcı tanımlı dosya grupları oluşturulabilir.

Yani,

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

Belirtilen büyük metin değeri sütunlarının, aslında varsayılan eylem olan birincil dosya grubu içinde depolanması gerektiğini söylediği için, biraz gereksiz görünebilir.

ÖZEL adlı özel bir dosya grubunun varlığını varsayarsak, muhtemelen şöyle bir şey yazarsınız:

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

Büyük ikili veya metin depolamak için özel bir dosya grubu oluşturursunuz ve bu durumda 'normal' alan bilgileri birincil dosya grubundaki bir veri dosyasında yer alırken, ilişkili 'büyük' ​​alanlar fiziksel olarak farklı bir veri dosyasında depolanır. (ikincil özel dosya grubunda).

Bunu, çekirdek ilişkisel veri modelini (disk alanı açısından görece küçük olması muhtemeldir) geniş alanlardan (orantılı olarak daha fazla disk alanı gerektirecek) ayırabilmek için yaparsınız - farklı arşivleme veya çoğaltma stratejilerine izin vermek için her dosya grubuna uygulanabilir.


39
Kabul edilenden çok daha anlaşılır bir cevap verdiğiniz için teşekkür ederiz !
Zero3

12
@Mitul Sheth Daha iyi bir doğru cevap seçmek için asla geç değil :)
Reversed Engineer

1

Metin, ntext, image, xml, varchar (max), nvarchar (max), varbinary (max) ve CLR gibi herhangi bir büyük metin sütununuz yoksa, yalnızca şunları kullanabilirsiniz:

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

2
Msg 156, Seviye 15, Durum 1, Satır 12 'TABLO' anahtar kelimesinin yanında yanlış sözdizimi.
Geriye döndürülmüş Mühendisi

@ReversedEngineer Bu sözdizimi hatası, sondaki gereksiz virgülden kaynaklanır: [modified_by] [varchar](200) NULL
OrizG

@OrizG Tabii. Sadece cevabın yazarına örnek kodunu düzeltmesi için yardım etmek istedim. Tamamen garip olan şey, artık makinemde sözdizimi hatası vermemesi (Microsoft SQL Server 2016 (SP2-CU12) (KB4536648) - 13.0.5698.0 (X64))
Reversed Engineer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.