Aracılığıyla paylaş


"İç içe FOR XML sorguları kullanın"

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

xml veri türü ve FOR XML sorgularındaki TYPE yönergesi FOR XML sorguları tarafından döndürülen XML'in hem sunucuda hem de istemcide işlenmesini sağlar.

Xml türü değişkenleriyle işleme

FOR XML sorgu sonucunu bir xml türü değişkenine atayabilir veya XQuery kullanarak sonucu sorgulayabilir ve daha fazla işlem için bu sonucu bir xml türü değişkenine atayabilirsiniz.

DECLARE @x xml
SET @x=(SELECT ProductModelID, Name
        FROM Production.ProductModel
        WHERE ProductModelID=122 or ProductModelID=119
        FOR XML RAW, TYPE)
SELECT @x
-- Result
--<row ProductModelID="122" Name="All-Purpose Bike Stand" />
--<row ProductModelID="119" Name="Bike Wash" />

Ayrıca @x veri türü yöntemlerinden birini kullanarak değişkeninde döndürülen XML'yi işleyebilirsiniz. Örneğin, ProductModelIDvalue() yöntemini kullanarak öznitelik değerini alabilirsiniz.

DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;

Aşağıdaki örnekte, FOR XML yönergesi yan tümcesinde belirtildiğinden, TYPE sorgu sonucu FOR XML türü olarak döndürülür.

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');

Sonuç şu şekildedir:

<myRoot>
  <row ProductModelID="122" Name="All-Purpose Bike Stand" />
  <row ProductModelID="119" Name="Bike Wash" />
</myRoot>

Sonuç xml türünde olduğundan, aşağıdaki sorguda gösterildiği gibi xml veri türü yöntemlerinden birini doğrudan bu XML'ye karşı belirtebilirsiniz. Sorguda, öğesinin ilk <row> öğesi alt öğesini almak için <myRoot> kullanılır.

SELECT  (SELECT ProductModelID, Name
         FROM Production.ProductModel
         WHERE ProductModelID=119 or ProductModelID=122
         FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');

Sonuç şu şekildedir:

<row ProductModelID="122" Name="All-Purpose Bike Stand" />

İç FOR XML sorgu sonuçlarını dış sorgulara xml türü örnekleri olarak döndürme

İç sorgunun sonucunun dış sorguya FOR XML türü olarak döndürüldüğü iç içe sorgular yazabilirsiniz. Mesela:

SELECT Col1,
       Col2,
       ( SELECT Col3, Col4
        FROM  T2
        WHERE T2.Col = T1.Col
        ...
        FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;

Önceki sorgudan aşağıdakilere dikkat edin:

  • İç FOR XML sorgusu tarafından oluşturulan XML, dış FOR XMLtarafından oluşturulan XML'ye eklenir.

  • İç sorgu TYPE yönergesini belirtir. Bu nedenle, iç sorgu tarafından döndürülen XML verileri xml türündedir. TYPE yönergesi belirtilmezse, iç FOR XML sorgusunun sonucu nvarchar(max) olarak döndürülür ve XML verileri oluşturulur.

Sonuçta elde edilen XML verilerinin şeklini denetleme

İÇ içe GEÇMIŞ FOR XML sorguları, sonuçta elde edilen XML verilerinin şeklini tanımlama konusunda size daha fazla denetim sağlar. Kısmen öznitelik merkezli ve kısmen öğe merkezli XML oluşturmak için iç içe FOR XML sorgularını kullanabilirsiniz.

Hem öznitelik merkezli hem de öğe merkezli XML'i iç içe geçmiş FOR XML sorguları ile belirtme hakkında daha fazla bilgi için bkz. FOR XML Sorgusu İç İçe FOR XML Sorgusu ile Karşılaştırıldı ve İç İçte FOR XML Sorguları ile XML'i Şekillendirme.

XML sorguları için iç içe auto modu belirterek eşdüzeyleri içeren XML hiyerarşileri oluşturabilirsiniz. Daha fazla bilgi için bkz. İç İçe OTO Mod Sorgusu ile Kardeş Oluşturma.

Hangi modu kullandığınızdan bağımsız olarak iç içe GEÇMIŞ FOR XML sorguları, sonuçta elde edilen XML'nin şeklini açıklama konusunda daha fazla denetim sağlar. BUNLAR, AÇIK mod sorguları yerine kullanılabilir.

Örnekler

Aşağıdaki konular iç içe FOR XML sorgularının örneklerini sağlar.

  • XML Sorgusu için İç İçe GEÇMIŞ FOR XML Sorgu Karşılaştırıldı
    Tek düzeyli FOR XML sorgusunu iç içe yerleştirilmiş for XML sorgusuyla karşılaştırır. Bu örnek, sorgunun sonucu olarak hem öznitelik merkezli hem de öğe merkezli XML'nin nasıl belirtileceğini gösteren bir tanıtım içerir.

  • İç İçe Otomatik Mod Sorgu ile EşDüzeyLer Oluşturma
    İç içe AUTO mod sorgusu kullanarak kardeş öğeler oluşturma yöntemlerini gösterir.

  • ASP.NET'de İç İçe FOR XML Sorguları Kullanın
    BIR ASPX uygulamasının SQL Server'dan XML döndürmek için FOR XML'yi nasıl kullanabileceğini gösterir.

  • İç İçe FOR XML Sorgularıyla XML'i Şekillendirme
    SQL Server tarafından oluşturulan xml belgesinin yapısını denetlemek için iç içe GEÇMIŞ FOR XML sorgularının nasıl kullanılacağını gösterir.