Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
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 *<column_set_name>* FOR ALL_SPARSE_COLUMNS veya ALTER TABLE ifadelerinde 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 adıyla belirtildiğinde, sütun kümeleri içeren tabloları kapsayan bölümlenmiş görünümler güncellenebilir hâle gelir. 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_UPDATEDiş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:
<column_name_1>value1</column_name_1><column_name_2>value2</column_name_2>...Sütun kümesi değerlerine örnek olarak şunlar verilebilir:
<sparseProp1>10</sparseProp1><sparseProp3>20</sparseProp3><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.
Warning
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. Seyrek sütunlar hala bir SELECT ifadesinde isimleriyle 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.
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 türü | localeID* | sqlCompareOptions | sqlCollationVersion | SqlSortId | Maksimum uzunluk | Precision | Scale |
|---|---|---|---|---|---|---|---|
| char, varchar, binary | -1 | 'Default' | 0 | 0 | 8000 | Uygulanamaz** | Uygulanamaz |
| nvarchar | -1 | 'Default' | 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 |
| datetime offset | 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 |
| time | 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.
Security
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ütununda SELECT, INSERT, UPDATE, DELETE ve REFERENCES izinlerinin TANIMA veya İPTAL ETME işlemi, bu kümenin temel üye sütunlarına geçmez. 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.
Bir seyrek sütun veya sütun kümesi üzerinde REVOKE deyimi yürütüldüğünde, güvenlik ayarları varsayılan olarak üst nesneye yönlendirilir.
Examples
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. Bir sütun içeren 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.
Note
Bu tablonun görüntülenmesini ve okunmasını kolaylaştırmak için yalnızca beş sütunu vardır.
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.
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.
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.
SELECT DocID, Title, SpecialPurposeColumns FROM DocumentStoreWithColumnSet ;
Sonuç kümesi aşağıdadır.
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.
SELECT DocID, Title, SpecialPurposeColumns
FROM DocumentStoreWithColumnSet
WHERE ProductionSpecification IS NOT NULL ;
Sonuç kümesi aşağıdadır.
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.
SELECT DocID, Title, ProductionSpecification, ProductionLocation
FROM DocumentStoreWithColumnSet
WHERE ProductionSpecification IS NOT NULL ;
Sonuç kümesi aşağıdadır.
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.
UPDATE DocumentStoreWithColumnSet
SET SpecialPurposeColumns = '<ProductionSpecification>ZZ285W</ProductionSpecification><ProductionLocation>38</ProductionLocation>'
WHERE DocID = 3 ;
GO
Important
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.
UPDATE DocumentStoreWithColumnSet
SET SpecialPurposeColumns = '<ProductionSpecification>ZZ285W</ProductionSpecification>'
WHERE DocID = 3 ;
GO