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
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Makalede açıklandığı gibi, FOR XMLkullanarak XML Oluşturma , RAW ve AUTO modu sorgu sonucundan oluşturulan XML'nin şekli üzerinde fazla denetim sağlamaz. Ancak, AÇıK modu bir sorgu sonucundan istediğiniz XML'yi oluşturma konusunda en fazla esnekliği sağlar.
XML'de beklenen iç içe yerleştirme gibi gerekli XML hakkındaki ek bilgilerin sorgunun bir parçası olarak açıkça belirtilmesi için, EXPLICIT modu sorgusunun belirli bir şekilde yazılması gerekir. İstediğiniz XML'e bağlı olarak, AÇıK mod sorguları yazmak zahmetli olabilir. PATH Modu iç içe yerleştirme ile kullanmanın, EXPLICIT modu sorguları yazmaya daha basit bir alternatif olduğunu fark edebilirsiniz.
Sorgunun bir parçası olarak istediğiniz XML'i AÇIK modda açıkladığınız için, oluşturulan XML'nin iyi biçimlendirilmiş ve geçerli olduğundan emin olmanız gerekir.
EXPLICIT modunda satır kümesi işleme
AÇIK modu, sorgu yürütmesinden kaynaklanan satır kümesini bir XML belgesine dönüştürür. AÇıK modun XML belgesini oluşturması için satır kümesinin belirli bir biçime sahip olması gerekir. Bu işlem mantığının istediğiniz XML'yi üretebilmesi için satır kümesini, evrensel tabloyubelirli bir biçimde oluşturmak için SELECT sorgusunu yazmanızı gerektirir.
İlk olarak, sorgu aşağıdaki iki meta veri sütununu üretmelidir:
İlk sütun geçerli öğenin etiket numarasını, tamsayı türünü sağlamalı ve sütun adı Tagolmalıdır. Sorgunuz, satır kümesinden oluşturulacak her öğe için benzersiz bir etiket numarası sağlamalıdır.
İkinci sütun, üst öğenin etiket numarasını sağlamalı ve bu sütun adı Üstolmalıdır. Bu şekilde, Etiket ve Üst sütun hiyerarşi bilgilerini sağlar.
Bu meta veri sütun değerleri, sütun adlarındaki bilgilerle birlikte istediğiniz XML'yi üretmek için kullanılır. Sorgunuz, sütun adlarını belirli bir biçimde vermelidir. Ayrıca, Üst sütunundaki 0 veya NULL değerleri, ilgili öğenin üst öğesi bulunmadığını gösterir. öğesi XML'ye en üst düzey öğe olarak eklenir.
Sorgu tarafından oluşturulan evrensel tablonun XML sonucu oluşturma işlemine nasıl işlendiğini anlamak için, bu evrensel tabloyu üreten bir sorgu yazdığınızı varsayalım:
Bu evrensel tablo hakkında aşağıdakilere dikkat edin:
İlk iki sütun Etiket ve Ebeveyn meta sütunlarıdır. Bu değerler hiyerarşiyi belirler.
Sütun adları, bu makalenin devamında açıklandığı gibi belirli bir şekilde tanımlanır.
Bu evrensel tablodan XML oluşturulurken, bu tablodaki veriler dikey olarak sütun gruplarına bölümlenmiştir. Gruplandırma, Etiketi değerine ve sütun adlarına göre belirlenir. XML oluştururken, işleme mantığı her satır için bir sütun grubu seçer ve bir öğe oluşturur. Bu örnekte aşağıdakiler geçerlidir:
İlk satırdaki Etiket sütun değeri 1 için, adları aynı etiket numarasını içeren sütunlar Customer!1!cid ve Customer!1!namebir grup oluşturur. Bu sütunlar satırı işlerken kullanılır ve oluşturulan öğenin şeklinin
<Customer id=... name=...>olduğunu fark etmiş olabilirsiniz. Sütun adı biçimi bu makalenin devamında açıklanmıştır.Etiketi sütun değeri 2 olan satırlar için, Sipariş!2!id ve Sipariş!2!tarih sütunları, daha sonra öğe oluşturulmasında kullanılan bir grup oluşturur,
<Order id=... date=... />.Etiketi sütun değeri 3 olan satırlar için, OrderDetail!3!id!id ve OrderDetail!3!pid!idref sütunları bir grup oluşturur. Bu satırların her biri, bu sütunlardan
<OrderDetail id=... pid=...>bir öğe oluşturur.
XML hiyerarşisi oluşturulurken satırlar sırayla işlenir. XML hiyerarşisi aşağıdaki gibi belirlenir:
İlk satır, Tag değeri 1'i ve Ana değeri NULL olarak belirtir. Bu nedenle, ilgili öğe
<Customer>öğesi, XML'de en üst düzey öğe olarak eklenir.<Customer cid="C1" name="Janine">İkinci satır, Etiket değeri 2'yi ve Ebeveyn değeri 1'i tanımlar. Bu nedenle,
<Order>öğesi,<Customer>öğesinin alt öğesi olarak eklenir.<Customer cid="C1" name="Janine"> <Order id="O1" date="1/20/1996">Sonraki iki satır, Etiket değeri 3 ve Üst değeri 2'yi tanımlar. Bu nedenle, iki öğe,
<OrderDetail>öğeleri,<Order>öğesinin alt öğeleri olarak eklenir.<Customer cid="C1" name="Janine"> <Order id="O1" date="1/20/1996"> <OrderDetail id="OD1" pid="P1"/> <OrderDetail id="OD2" pid="P2"/>Son satır, 2'yi etiketi numarası ve 1'i üst etiket numarası olarak tanımlar. Bu nedenle,
<Order>öğesi,<Customer>ana öğesine alt öğe olarak eklenir.<Customer cid="C1" name="Janine"> <Order id="O1" date="1/20/1996"> <OrderDetail id="OD1" pid="P1"/> <OrderDetail id="OD2" pid="P2"/> </Order> <Order id="O2" date="3/29/1997"> </Customer>
Özetlemek gerekirse, Etiketi ve Ebeveyn meta sütunlarındaki değerler, sütun adlarında verilen bilgiler ve satırların doğru sıralaması, EXPLICIT modunda istediğiniz XML'i oluşturur.
Evrensel tablo satırı sıralama
XML oluşturulurken, evrensel tablodaki satırlar sırayla işlenir. Bu nedenle, ebeveynleriyle ilişkili doğru alt öğe örneklerini almak için satır kümesindeki satırların sıralanması gerekir, böylece her ebeveyn düğümün hemen ardından alt öğeleri gelir.
Evrensel tabloda sütun adlarını belirtme
AÇıK mod sorguları yazarken, sonuçta elde edilen satır kümesindeki sütun adları bu biçim kullanılarak belirtilmelidir. Bunlar, yönerge kullanılarak belirtilen öğe ve öznitelik adları ile diğer ek bilgiler de dahil olmak üzere dönüştürme bilgileri sağlar.
Bu genel biçimdir:
ElementName!TagNumber!AttributeName!Directive
Aşağıda, biçimin bölümlerinin açıklaması yer alır.
ElementName
Ögenin sonuçta elde edilen genel tanımlayıcısı. Örneğin, MüşterilerElementNameolarak belirtilirse,
<Customers>öğesi oluşturulur.TagNumber
Bir öğeye atanan benzersiz etiket değeri. Bu değer, Tag ve Parentadlı iki meta veri sütununun yardımıyla, sonuçta elde edilen XML’deki öğelerin iç içe yerleştirilmesini belirler.
AttributeName
Belirtilen ElementNameiçinde oluşturmak için özniteliğin adını sağlar. Yönergesi belirtilmemişse bu davranıştır.
Yönergesi belirtilirse ve xml, cdataveya öğesi ise, bu değer ElementNameöğesinin bir alt öğesini oluşturmak için kullanılır ve sütun değeri buna eklenir.
Yönergesibelirtirseniz, AttributeName boş olabilir. Örneğin, ElementName! TagNumber!! Yönergesi. Bu durumda, sütun değeri doğrudan ElementNameiçerir.
Yönergesi
Yönergesi isteğe bağlıdır ve XML'nin oluşturulması için ek bilgi sağlamak için bunu kullanabilirsiniz. Yönergesi iki amacı vardır.
Amaçlardan biri, değerleri ID, IDREF ve IDREFS olarak kodlamaktır. Id, IDREFve IDREFS anahtar sözcüklerini Yönergeleri olarak belirtebilirsiniz. Bu yönergeler öznitelik türlerini değiştirir. Bu, belge içi bağlantılar oluşturmanıza olanak tanır.
Ayrıca, dize verilerini XML ile eşlemeyi belirtmek için Yönergesi kullanabilirsiniz. , öğesi, elementxsinil, xml, xmltextve cdata anahtar sözcükleri Yönergesi olarak kullanılabilir. hide yönergesi düğümü gizler. Bu, değerleri yalnızca sıralama amacıyla aldığınızda, ancak sonuçta elde edilen XML'de olmasını istemediğinizde yararlıdır.
öğesi yönergesi, öznitelik yerine kapsanan bir öğe oluşturur. İçerilen veriler bir varlık olarak kodlanır. Örneğin, < karakteri <olur. NULL sütun değerleri için hiçbir öğe oluşturulmaz. Null sütun değerleri için bir öğenin oluşturulmasını istiyorsanız, elementxsinil yönergesini belirtebilirsiniz. Bu, xsi:nil=TRUE özniteliğine sahip bir öğe oluşturur.
xml yönergesi, varlık kodlaması olmaması dışında bir öğesi yönergesi ile aynıdır. öğesi yönergesi, ID, IDREF veya IDREFS ile birleştirilebilir; oysa xml yönergesi, gizlemek dışında başka hiçbir yönergeyle birlikte kullanılamaz.
cdata yönergesi, verileri bir CDATA bölümüyle sarmalayarak içerir. İçerik varlık kodlaması yapılmamış. Özgün veri türü, varchar, nvarchar, metinveya ntextgibi bir metin türü olmalıdır. Bu yönerge yalnızca gizleme ile kullanılabilir. Bu yönerge kullanıldığında, AttributeName belirtilmemelidir.
Bu iki grup arasında yönergelerin birleştirilmesine çoğu durumda izin verilir, ancak bunları kendi aralarında birleştirmeye izin verilmez.
Yönergesi ve AttributeName belirtilmezse, örneğin Customer!1, element yönergesi ima edilir, böylece Customer!1!!elementgibi görünür ve sütun verileri ElementNameiçinde yer alır.
xmltext yönergesi belirtilirse, sütun içeriği belgenin geri kalanıyla tümleştirilmiş tek bir etikette sarmalanır. OPENXML tarafından bir sütunda depolanan aşırı yüklenmiş, kullanılmamış XML verilerini getirmede bu yönerge yararlıdır. Daha fazla bilgi için bkz. OPENXML (SQL Server).
AttributeName belirtilirse, etiket adı belirtilen adla değiştirilir. Aksi takdirde, içerik varlık kodlaması olmadan kapsamanın başına yerleştirilerek, özniteliği kapsayan öğelerin geçerli öznitelik listesine eklenir. Bu yönergeye sahip sütun, varchar, nvarchar, char, nchar, metinveya ntextgibi bir metin türü olmalıdır. Bu yönerge yalnızca gizleme ile kullanılabilir. Bu yönerge, bir sütunda depolanan taşma verilerini getirmede kullanışlıdır. İçerik iyi biçimlendirilmiş bir XML değilse, davranış tanımlanmamıştır.
Sonraki adımlar
Aşağıdaki örneklerde, EXPLICIT modunun kullanımı gösterilmektedir.
- Örnek: Çalışan Bilgilerini Alma
- Örnek: ELEMENT Yönergesini Belirleme
- Örnek: ELEMENTXSINIL Yönergesini Belirtme
- Örnek: AÇıK Mod ile EşDüzeyLer Oluşturma
- Örnek: ID ve IDREF Yönergelerini Belirtme
- Örnek: ID ve IDREFS Yönergelerini Belirtme
- Örnek: HIDE Yönergesini Belirtme
- Örnek: ELEMENT Yönergesini ve Varlık Kodlamasını Belirtme
- Örnek: CDATA Yönergesi Belirtme
- Örnek: XMLTEXT Yönergesi Belirtme
Ayrıca bkz.
- FOR XML ile RAW Modu Kullanma
- FOR XML ile AUTO Modu Kullanma
- FOR XML ile PATH Modunu Kullanma
- SEÇ (Transact-SQL)
- XML için (SQL Server)