İngilizce dilinde oku

Aracılığıyla paylaş


Sütun kümelerini kullanın

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Microsoft Fabric'te Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiSQL veritabanı

Seyrek sütunlar kullanan tablolar, tablodaki tüm seyrek sütunları döndürmek için bir sütun kümesi belirleyebilir. Sütun kümesi, tablonun tüm seyrek sütunlarını yapılandırılmış bir çıktıda birleştiren, yazılmamış bir XML gösterimidir. Sütun kümesi, tabloda fiziksel olarak depolanmadığı için hesaplanmış bir sütuna benzer. Sütun kümesi, sütun kümesinin doğrudan güncelleştirilebilir olması bakımından hesaplanmış sütundan farklıdır.

Bir tablodaki sütun sayısı büyük olduğunda ve bunlar üzerinde ayrı ayrı çalıştırmak zahmetli olduğunda sütun kümelerini kullanmayı düşünmelisiniz. Uygulamalar, çok sayıda sütunu olan tablolarda sütun kümelerini kullanarak veri seçip eklediklerinde bazı performans iyileştirmeleri görebilir. Ancak tablodaki sütunlarda çok sayıda dizin tanımlandığında sütun kümelerinin performansı azaltılabilir. Bunun nedeni, yürütme planı için gereken bellek miktarının artmasıdır.

Sütun kümesi tanımlamak için CREATE TABLE veya ALTER TABLE ifadelerinde *<column_set_name>* FOR ALL_SPARSE_COLUMNS anahtar sözcüklerini kullanın.

Sütun kümelerini kullanma yönergeleri

Sütun kümelerini kullanırken aşağıdaki yönergeleri göz önünde bulundurun:

  • Seyrek sütunlar ve sütun kümesi aynı deyimin parçası olarak eklenebilir.

  • Tablo zaten seyrek sütunlar içeriyorsa tabloya sütun kümesi eklenemez.

  • Sütun kümesi içindeki sütun değiştirilemez veya yeniden adlandırılamaz. Sütun kümesini değiştirmek için seyrek sütunları ve sütun kümesini silip yeniden oluşturmanız gerekir. SPARSE anahtar sözcüğüne sahip sütunlar tablodan eklenebilir ve bırakılabilir.

  • Seyrek sütun içermeyen bir tabloya sütun kümesi eklenebilir. Daha sonra tabloya seyrek sütunlar eklenirse, bunlar sütun kümesinde görünür.

  • Tablo başına yalnızca bir sütun kümesine izin verilir.

  • Seyrek sütunları kullanmak için sütun kümesi isteğe bağlıdır ve gerekli değildir.

  • Kısıtlamalar veya varsayılan değerler bir sütun kümesinde tanımlanamaz.

  • Hesaplanan sütunlar sütun kümesi sütunları içeremez.

  • Dağıtılmış sorgular, sütun kümeleri içeren tablolarda desteklenmez.

  • Çoğaltma sütun kümelerini desteklemez.

  • Değişiklik veri yakalaması sütun kümelerini desteklemez.

  • Sütun kümesi herhangi bir dizin türünün parçası olamaz. Buna XML dizinleri, tam metin dizinleri ve dizinlenmiş görünümler dahildir. Sütun kümesi herhangi bir dizine eklenen sütun olarak eklenemez.

  • Sütun kümesi, filtrelenmiş dizinin veya filtrelenmiş istatistiklerin filtre ifadesinde kullanılamaz.

  • Görünümde sütun kümesi bulunduğunda, sütun kümesi görünümde XML sütunu olarak görünür.

  • Sütun kümesi dizinli görünüm tanımına eklenemez.

  • Bölümlenmiş görünüm, seyrek sütunları ada göre belirttiğinde sütun kümeleri içeren tabloları kapsayan bölümlenmiş görünümler güncellenebilir. Bölümlenmiş görünüm, sütun kümesine başvurduğunda güncelleştirilebilir değildir.

  • Sütun kümelerine başvuran sorgu bildirimlerine izin verilmez.

  • XML verilerinin boyut sınırı 2 GB'tır. Bir satırdaki TÜM NULL olmayan seyrek sütunların birleşik verileri bu sınırı aşarsa, sorgu veya DML işlemi bir hata oluşturur.

  • COLUMNS_UPDATED işlevi tarafından döndürülen veriler hakkında bilgi için bkz. Seyrek Sütunları Kullanma.

Sütun kümesinden veri seçme yönergeleri

Bir sütun kümesinden veri seçmek için aşağıdaki yönergeleri göz önünde bulundurun:

  • Kavramsal olarak sütun kümesi, temel alınan ilişkisel sütun kümesini tek bir XML gösteriminde toplayan güncelleştirilebilir, hesaplanan bir XML sütunu türüdür. Sütun kümesi yalnızca ALL_SPARSE_COLUMNS özelliğini destekler. Bu özellik, belirli bir satır için tüm seyrek sütunlardan NULL olmayan tüm değerleri toplamak için kullanılır.

  • SQL Server Management Studio tablo düzenleyicisinde, sütun kümeleri düzenlenebilir bir XML alanı olarak görüntülenir. Sütun kümelerini şu biçimde tanımlayın:

    XML
    <column_name_1>value1</column_name_1><column_name_2>value2</column_name_2>...  
    

    Sütun kümesi değerlerine örnek olarak şunlar verilebilir:

    XML
    <sparseProp1>10</sparseProp1><sparseProp3>20</sparseProp3>  
    
    XML
    <DocTitle>Bicycle Parts List</DocTitle><Region>West</Region>
    
  • Null değerler içeren seyrek sütunlar, sütun kümesinin XML gösteriminden atlanır.

Uyarı

Sütun kümesi eklemek, SELECT * sorgularının davranışını değiştirir. Sorgu, sütun kümesini XML sütunu olarak döndürür ve ayrı ayrı seyrek sütunları döndürmez. Şema tasarımcıları ve yazılım geliştiricileri, mevcut uygulamaları bozmamaya dikkat etmelidir. Bireysel seyrek sütunlar, SELECT deyiminde isimle sorgulanabilir.

Sütun kümesine veri ekleme veya değiştirme

Seyrek bir sütunun veri işlemesi, tek tek sütunların adı kullanılarak veya sütun kümesinin adına başvurarak ve sütun kümesinin XML biçimi kullanılarak ayarlanan sütun değerlerini belirterek gerçekleştirilebilir. Seyrek sütunlar XML sütununda herhangi bir sırada görünebilir.

Seyrek sütun değerleri XML sütun kümesi kullanılarak eklendiğinde veya güncelleştirildiğinde, temel alınan seyrek sütunlara eklenen değerler örtük olarak xml veri türünden dönüştürülür. bigint, int, smallint, tinyint, bit, floatve gerçekgibi sayısal veri türlerinin çoğu söz konusu olduğunda, sütun için XML'deki boş bir değer boş dizeye dönüştürülür. Bu, aşağıdaki örnekte gösterildiği gibi sütuna sıfır eklenmesine neden olur. Ancak, 0'a değiştirme, sayısal ve ondalık veri türleri için geçerli değildir; bu değerler belirtilmelidir veya dönüştürme hatasına neden olur.

SQL
CREATE TABLE t (i int SPARSE, cs xml column_set FOR ALL_SPARSE_COLUMNS);  
GO  
INSERT t(cs) VALUES ('<i/>');  
GO  
SELECT i FROM t;  
GO  

Bu örnekte, isütunu için değer belirtilmedi, ancak 0 değeri eklendi.

sql_variant veri türünü kullanma

sql_variant tarih türü, int, charve tarihgibi birden çok farklı veri türünü depolayabilir. Sütun kümeleri, oluşturulan XML sütununda öznitelik olarak bir sql_variant değeriyle ilişkili ölçek, duyarlık ve yerel ayar bilgileri gibi veri türü bilgilerini verir. Bu öznitelikleri özel oluşturulan bir XML deyiminde sütun kümesindeki ekleme veya güncelleştirme işlemi için giriş olarak sağlamaya çalışırsanız, bu özniteliklerden bazıları gerekir ve bazıları varsayılan değere atanır. Aşağıdaki tabloda, değer sağlanmadığında sunucunun oluşturduğu veri türleri ve varsayılan değerler listelenmiştir.

Veri tipi localeID* sqlCompareOptions sqlCollationVersion SqlSortId Maksimum uzunluk Kesinlik Ölçek
char, varchar, binary -1 'Varsayılan' 0 0 8000 Uygulanamaz** Uygulanamaz
nvarchar -1 'Varsayılan' 0 0 4000 Uygulanamaz Uygulanamaz
ondalık, kayangerçek Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz 18 0
tamsayı, büyük tamsayı, küçüktamsayı, küçük tamsayı Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz
datetime2 Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz 7
tarih saat farkı Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz 7
datetime, date, smalldatetime Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz
para, küçük para Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz
saat Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz Uygulanamaz 7

* localeID -1 varsayılan yerel ayar anlamına gelir. İngiliz yerel ayarı 1033'dür.

** Uygulanamaz = Sütun kümesindeki bir seçme işlemi sırasında bu öznitelikler için hiçbir değer çıkışı yapılmaz. Ekleme veya güncelleştirme işlemindeki bir sütun kümesi için sağlanan XML gösteriminde çağıran tarafından bu öznitelik için bir değer belirtildiğinde hata oluşturur.

Güvenlik

Sütun kümesinin güvenlik modeli, tablo ve sütunlar arasında var olan güvenlik modeline benzer şekilde çalışır. Sütun kümeleri mini tablo olarak görselleştirilebilir ve seçme işlemi bu mini tablodaki SELECT * işlemi gibidir. Ancak, sütunların seyrek sütunlar olarak ayarlandığı durumlardaki ilişki, kapsayıcı bir ilişkiden ziyade bir gruplandırma ilişkisidir. Güvenlik modeli, sütun kümesi sütunundaki güvenliği denetler ve alttaki seyrek sütunlardaki DENY işlemlerini dikkate alır. Güvenlik modelinin ek özellikleri şunlardır:

  • Güvenlik izinleri, tablodaki diğer sütunlara benzer şekilde sütun kümesi sütunundan verilebilir ve iptal edilebilir.

  • Sütun kümesi sütunundaKI SELECT, INSERT, UPDATE, DELETE ve REFERENCES izinlerinin VERME veya İPTAL ETME işlemi, bu kümenin temel üye sütunlarına yayılmaz. Yalnızca sütun setinin kullanımı için geçerlidir. Sütun kümesindeki REDDET izni, tablonun temel alınan seyrek sütunlarına yayılır.

  • Sütun kümesi sütununda SELECT, INSERT, UPDATE ve DELETE deyimlerini yürütmek için, kullanıcının sütun kümesi sütununda ilgili izinlere ve ayrıca tablodaki tüm seyrek sütunlarda buna karşılık gelen izinlere sahip olması gerekir. Sütun kümesi tablodaki tüm seyrek sütunları temsil ettiğinden, tüm seyrek sütunlar üzerinde izniniz olmalıdır ve bu, değiştirmiyor olabileceğiniz seyrek sütunları içerir.

  • Seyrek bir sütun veya sütun kümesinde REVOKE deyiminin yürütülmesi, güvenliği varsayılan olarak üst nesnesinin güvenlik ayarlarına ayarlar.

Örnekler

Aşağıdaki örneklerde, belge tablosu DocID ve Titleortak sütun kümesini içerir. Üretim grubu, tüm üretim belgeleri için bir ProductionSpecification ve ProductionLocation sütunu ister. Pazarlama grubu, pazarlama belgeleri için bir MarketingSurveyGroup sütunu istiyor.

A. Sütun kümesi olan bir tablo oluşturun

Aşağıdaki örnek seyrek sütunlar kullanan tabloyu oluşturur ve SpecialPurposeColumnssütun kümesini içerir. Örnek tabloya iki satır ekler ve ardından tablodan verileri seçer.

Not

Bu tablonun görüntülenmesini ve okunmasını kolaylaştırmak için yalnızca beş sütunu vardır.

SQL
USE AdventureWorks2022;  
GO  
  
CREATE TABLE DocumentStoreWithColumnSet  
    (DocID int PRIMARY KEY,  
     Title varchar(200) NOT NULL,  
     ProductionSpecification varchar(20) SPARSE NULL,  
     ProductionLocation smallint SPARSE NULL,  
     MarketingSurveyGroup varchar(20) SPARSE NULL,  
     MarketingProgramID int SPARSE NULL,  
     SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);  
GO  

B. Seyrek sütunların adlarını kullanarak tabloya veri ekleme

Aşağıdaki örnekler, Örnek A'da oluşturulan tabloya iki satır ekler. Örneklerde seyrek sütunların adları kullanılır ve sütun kümesine başvurmaz.

SQL
INSERT DocumentStoreWithColumnSet (DocID, Title, ProductionSpecification, ProductionLocation)  
VALUES (1, 'Tire Spec 1', 'AXZZ217', 27);  
GO  
  
INSERT DocumentStoreWithColumnSet (DocID, Title, MarketingSurveyGroup)  
VALUES (2, 'Survey 2142', 'Men 25 - 35');  
GO  

C. Sütun kümesinin adını kullanarak tabloya veri ekleme

Aşağıdaki örnek, A örneğinde oluşturulan tabloya üçüncü bir satır ekler. Bu kez seyrek sütunların adları kullanılmaz. Bunun yerine sütun kümesinin adı kullanılır ve ekleme işlemi, XML biçimindeki dört seyrek sütundan ikisinin değerlerini sağlar.

SQL
INSERT DocumentStoreWithColumnSet (DocID, Title, SpecialPurposeColumns)  
VALUES (3, 'Tire Spec 2', '<ProductionSpecification>AXW9R411</ProductionSpecification><ProductionLocation>38</ProductionLocation>');  
GO  

D. SELECT * kullanıldığında sütun kümesinin sonuçlarını gözlemleyin

Aşağıdaki örnek, sütun kümesi içeren tablodan tüm sütunları seçer. Seyrek sütunların birleştirilmiş değerlerini içeren bir XML sütunu döndürür. Seyrek sütunları tek tek döndürmez.

SQL
SELECT DocID, Title, SpecialPurposeColumns FROM DocumentStoreWithColumnSet ;  

Sonuç kümesi aşağıdadır.

Output
DocID  Title        SpecialPurposeColumns  
1      Tire Spec 1  <ProductionSpecification>AXZZ217</ProductionSpecification><ProductionLocation>27</ProductionLocation>  
2      Survey 2142  <MarketingSurveyGroup>Men 25 - 35</MarketingSurveyGroup>  
3      Tire Spec 2  <ProductionSpecification>AXW9R411</ProductionSpecification><ProductionLocation>38</ProductionLocation> 

E. İsmiyle ayarlanan sütun setini seçmenin sonuçlarını gözlemleyin

Üretim departmanı pazarlama verileriyle ilgilenmediğinden, bu örnek çıkışı kısıtlamak için bir WHERE yan tümcesi ekler. Örnekte sütun kümesinin adı kullanılır.

SQL
SELECT DocID, Title, SpecialPurposeColumns  
FROM DocumentStoreWithColumnSet  
WHERE ProductionSpecification IS NOT NULL ;  

Sonuç kümesi aşağıdadır.

Output
DocID  Title        SpecialPurposeColumns  
1      Tire Spec 1  <ProductionSpecification>AXZZ217</ProductionSpecification><ProductionLocation>27</ProductionLocation>  
3      Tire Spec 2  <ProductionSpecification>AXW9R411</ProductionSpecification><ProductionLocation>38</ProductionLocation>  

F. İsimle seyrek sütunları seçerken sonuçları gözlemleyin

Tablo bir sütun kümesi içerdiğinde, aşağıdaki örnekte gösterildiği gibi tek tek sütun adlarını kullanarak tabloyu sorgulamaya devam edebilirsiniz.

SQL
SELECT DocID, Title, ProductionSpecification, ProductionLocation   
FROM DocumentStoreWithColumnSet  
WHERE ProductionSpecification IS NOT NULL ;  

Sonuç kümesi aşağıdadır.

Output
DocID  Title        ProductionSpecification ProductionLocation`  
1      Tire Spec 1  AXZZ217                 27`  
3      Tire Spec 2  AXW9R411                38`  

G. Sütun kümesi kullanarak tabloyu güncelleştirme

Aşağıdaki örnek, üçüncü kaydı bu satır tarafından kullanılan her iki seyrek sütun için yeni değerlerle güncelleştirir.

SQL
UPDATE DocumentStoreWithColumnSet  
SET SpecialPurposeColumns = '<ProductionSpecification>ZZ285W</ProductionSpecification><ProductionLocation>38</ProductionLocation>'  
WHERE DocID = 3 ;  
GO  

Önemli

Sütun kümesi kullanan update deyimi, tablodaki tüm seyrek sütunları güncelleştirir. Referans verilmeyen seyrek sütunlar NULLolarak güncellenir.

Aşağıdaki örnek üçüncü kaydı güncelleştirir, ancak yalnızca doldurulan iki sütundan birinin değerini belirtir. İkinci sütun ProductionLocationUPDATE deyimine dahil değildir ve NULLolarak güncelleştirilir.

SQL
UPDATE DocumentStoreWithColumnSet  
SET SpecialPurposeColumns = '<ProductionSpecification>ZZ285W</ProductionSpecification>'  
WHERE DocID = 3 ;  
GO  

Sonraki adımlar