Aracılığıyla paylaş


sp_tableoption (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Kullanıcı tanımlı tablolar için seçenek değerlerini ayarlar. sp_tableoption varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image veya büyük kullanıcı tanımlı tip sütunlarıyla tabloların satır içi davranışını kontrol etmek için kullanılabilir.

Önemli

Metin sırada özellik, SQL Server'ın gelecekteki bir sürümünde kaldırılacaktır. Büyük değerli veri depolamak için varchar(max), nvarchar(max) ve varbinary(max) veri türlerini kullanmanızı öneririz.

Transact-SQL söz dizimi kuralları

Sözdizimi

sp_tableoption
    [ @TableNamePattern = ] N'TableNamePattern'
    , [ @OptionName = ] 'OptionName'
    , [ @OptionValue = ] 'OptionValue'
[ ; ]

Arguments

[ @TableNamePattern = ] N'TableNamePattern'

Kullanıcı tarafından tanımlanan bir veritabanı tablosunun nitelikli veya niteliksiz adı. @TableNamePatternnvarchar(776)'dır ve varsayılan yoktur. Veritabanı adı dahil olmak üzere tam nitelikli bir tablo adı sağlanırsa, veritabanı adı mevcut veritabanının adı olmalıdır. Birden fazla tablo için tablo seçenekleri aynı anda ayarlanamaz.

[ @OptionName = ] 'OptionName'

Bir tablo seçeneği adı. @OptionNamevarchar(35)'dir ve aşağıdaki değerlerden biri olabilir.

Değer Description
table lock on bulk load Devre dışı bırakıldığında (varsayılan olarak), kullanıcı tanımlı tablolarda toplu yükleme sürecinin satır kilitlerini elde etmesine neden olur. Etkinleştirildiğinde, kullanıcı tanımlı tablolardaki toplu yükleme süreçlerinin toplu güncelleme kilidi elde etmesine neden olur.
insert row lock Artık desteklenmiyor.

Bu seçenek, SQL Server'ın kilitleme davranışını etkilemez ve yalnızca mevcut script ve prosedürlerin uyumluluğu için dahil edilmiştir.
text in row Ya OFF0 da (varsayılan olarak devre dışı bırakıldığında), mevcut davranışı değiştirmez ve sırada BLOB yoktur.

Belirtildiğinde ve @OptionValueON (etkinleştirilmiş) veya bir tam sayı değeri 24 ile 7000, yeni metin, ntext veya resim dizileri doğrudan veri satırında saklanır. Tüm mevcut BLOB (ikili büyük nesne: metin, ntext veya görüntü) verileri, BLOB değeri güncellendiğinde satır formatında metne dönüştürülür. Daha fazla bilgi için bkz. Açıklamalar.
large value types out of row 1 = varchar(max), nvarchar(max), varbinary(max), xml ve büyük kullanıcı tanımlı tip (UDT) sütunları sıradan ayrılır ve köke 16 baytlık bir işaretçi bulunur.

0 = varchar(max), nvarchar(max), varbinary(max), xml ve büyük UDT değerleri doğrudan veri satırında saklanır; 8.000 bayt sınırına kadar ve değer kayıtta sığabildiği sürece. Değer kayıtta sığmazsa, bir işaretçi sırada, geri kalan ise LOB depolama alanında sıradan dışarıda saklanır. 0 varsayılan değerdir.

Büyük kullanıcı tanımlı tip (UDT) şu sürümler için geçerlidir: SQL Server 2008 (10.0.x) ve sonrası.

Büyük veri türlerinin depolanması için bir konum belirtmek için CREATE TABLE seçeneğini kullanınTEXTIMAGE_ON.
vardecimal storage format için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.

, TRUEON, veya 1, vardesimal depolama formatı için belirlenen tablo etkinleştirildiğinde. FALSE, OFF, veya 0, vardecimal depolama formatı için tablo etkinleştirilmediğinde. vardecimal depolama formatı yalnızca veritabanı vardecimal depolama formatı için etkinleştirildiğinde sp_db_vardecimal_storage_format kullanılarak etkinleştirilebilir. SQL Server 2008 (10.0.x) ve sonrasında vardecimal depolama formatı kullanımdan kaldırılmıştır. Bunun yerine sıkıştırma kullanın ROW . Daha fazla bilgi için bkz. Veri sıkıştırma. 0 varsayılan değerdir.

[ @OptionValue = ] 'OptionValue'

@OptionName etkin (TRUE, ON, veya 1) veya devre dışı bırakılıp (FALSE, OFF, veya 0) olarak belirtir. @OptionValuevarchar(12)'dir, varsayılan yoktur. @OptionValue büyük harf duyarsızlığıdır.

Satır içindeki metin seçeneği için, geçerli seçenek değerleri 0, ON, OFF, veya 'den bir 7000tam sayıdır.24 @OptionValueONolduğunda limit varsayılan olarak 256 bayt olur.

Dönüş kodu değerleri

0 (başarı) veya hata numarası (başarısızlık).

Açıklamalar

sp_tableoption yalnızca kullanıcı tanımlı tablolar için seçenek değerlerini ayarlamak için kullanılabilir. Tablo özelliklerini görüntülemek için OBJECTPROPERTY veya sorgu sys.tableskullanın.

Metin satır içindeki seçenek yalnızca sp_tableoption metin sütunları içeren tablolarda etkinleştirilebilir veya devre dışı bırakılabilir. Tabloda metin sütunu yoksa, SQL Server hata oluşturur.

Satır içindeki metin seçeneği etkinleştirildiğinde, @OptionValue parametresi kullanıcıların bir BLOB için bir satırda saklanacak maksimum boyutu belirlemelerini sağlar. Varsayılan 256 bayttır, ancak değerler 24 ile 7000 bayt arasında değişebilir.

Metin, ntext veya görüntü dizileri aşağıdaki koşullar uygulanırsa veri satırında saklanır:

  • Sırada metin etkinleştirildi.
  • Ipin uzunluğu, @OptionValue'de belirtilen sınırdan daha kısadır.
  • Veri satırında yeterince alan var.

BLOB dizileri veri satırında saklandığında, metin, ntext veya resim dizelerini okumak ve yazmak, karakter ve ikili dizeleri okumak veya yazmak kadar hızlı olabilir. SQL Server, BLOB dizesini okumak veya yazmak için ayrı sayfalara erişmek zorunda değil.

Bir metin, ntext veya resim dizisi belirtilen sınırdan veya satırdaki kullanılabilir alandan büyükse, işaretçiler satırda saklanır. BLOB dizilerinin satırda saklanma koşulları yine de geçerlidir: Veri satırında işaretçileri tutacak kadar alan olmalıdır.

Bir tablo satırında saklanan BLOB dizileri ve işaretçiler, değişken uzunluklu dizelere benzer şekilde ele alınır. SQL Server yalnızca diziyi veya işaretçiyi depolamak için gereken bayt sayısını kullanır.

Mevcut BLOB dizileri satır içindeki metin ilk etkinleştirildiğinde hemen dönüştürülmez. Dizileri ancak güncellendiklerinde dönüştürülür. Benzer şekilde, satır içindeki metin seçeneği sınırı artırıldığında, veri satırında zaten bulunan metin, ntext veya resim dizileri güncellenene kadar yeni sınıra uyacak şekilde dönüştürülmez.

Uyarı

Metin satır içindeki seçeneği devre dışı bırakmak veya seçeneğin sınırını azaltmak tüm BLOB'ların dönüştürülmesini gerektirir; bu nedenle, dönüştürülmesi gereken BLOB dizisi sayısına bağlı olarak süreç uzun olabilir. Dönüşüm sürecinde tablo kilitlenir.

Tablo değişkeni döndüren bir fonksiyon da dahil olmak üzere bir tablo değişkeni, varsayılan 256 satır içi sınırla otomatik olarak metin satır içindeki seçeneği etkinleştirir. Bu seçenek değiştirilemez.

Metin sırasındaki seçenek TEXTPTR, WRITETEXT, UPDATETEXT ve READTEXT fonksiyonlarını destekler. Kullanıcılar SUBSTRING() fonksiyonuyla bir BLOB'un bölümlerini okuyabilir, ancak sıradaki metin işaretçilerinin diğer metin işaretçilerinden farklı süre ve sayı sınırlarına sahip olduğunu unutmamalıdır.

Bir tabloyu vardecimal depolama formatından normal ondalık depolama formatına geri getirmek için veritabanının SIMPLE kurtarma modelinde olması gerekir. Kurtarma modelini değiştirmek, yedekleme amacıyla log zincirini bozar, bu yüzden vardecimal depolama formatını bir tablodan kaldırdıktan sonra tam bir veritabanı yedeklemesi oluşturmalısınız.

Mevcut bir LOB veri tipi sütununu (metin, ntext veya resim) küçük-orta büyük değer tiplerine (varchar(max), nvarchar(max) veya varbinary(max)) dönüştürüyorsanız ve çoğu ifade ortamınızdaki büyük değer tipi sütunlarına atıfta bulunmuyorsa, en iyi performans elde etmek için large_value_types_out_of_row değiştirmeyi 1 düşünün. large_value_types_out_of_row opsiyon değeri değiştirildiğinde, mevcut varchar(max), nvarchar(max), varbinary(max) ve xml değerleri hemen dönüştürülmez. Tellerin depolama alanı daha sonra güncellendikçe değiştirilir. Tabloya eklenen yeni değerler, tablo seçeneğine göre saklanır. Hemen sonuçlar için, ya verinin bir kopyasını alın ve large_value_types_out_of_row ayarını değiştirdikten sonra tabloyu yeniden doldurun ya da her küçük-orta büyük değer tipi sütununu kendine güncelleyin ki dizide depolama alanı tablo seçeneği geçerli şekilde değiştirilsin. Güncelleme veya yeniden nüfuslandırmadan sonra tablodaki indeksleri yeniden oluşturarak tabloyu yoğunlaştırmayı düşünün.

Permissions

Çalıştırmak sp_tableoption için masada izin gerekir ALTER .

Örnekler

A. XML verilerini satırdan depolayın

Aşağıdaki örnek, tablodaki HumanResources.JobCandidatexml verilerinin satır dışı olarak saklanmasını belirtir.

USE AdventureWorks2022;
GO

EXECUTE sp_tableoption 'HumanResources.JobCandidate', 'large value types out of row', 1;

B. Bir tabloda vardecimal depolama formatını etkinleştir

Aşağıdaki örnek, ondalık veri tipini vardesimal depolama formatında depolamak için tabloyu Production.WorkOrderRouting değiştirir.

USE master;
GO

-- The database must be enabled for vardecimal storage format
-- before a table can be enabled for vardecimal storage format
EXECUTE sp_db_vardecimal_storage_format 'AdventureWorks2022', 'ON';
GO

USE AdventureWorks2022;
GO

EXECUTE sp_tableoption 'Production.WorkOrderRouting', 'vardecimal storage format', 'ON';