Aracılığıyla paylaş


Iç içe for xml sorgular kullanma

İle başlayan SQL Server 2005, xmlveri türü ve type Direktif for xml sorguları hem sunucu hem de istemci işleme for xml sorgu tarafından döndürülen xml etkinleştirin.

XML türü değişkenleri ile işleme

for xml sorgu sonucu atayabileceğiniz bir xml yazın değişkeni veya XQuery sonucu sorgulamak için kullanın ve bu sonucu atama bir xml türü değişkeni için daha fazla işlem.

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 değişkeninde döndürülen xml işleyebilir @x, birini kullanarak xmlveri türü yöntemleri. Örneğin, sen-ebilmek geri almak ProductModelIDöznitelik değeri kullanarak value() yöntemi.

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

Aşağıdaki örnekte, FOR XMLsorgu sonucu olarak döndürülen bir xmlyazın, çünkü TYPEyönergesi içinde belirtilen FOR XMLtümcesi.

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

Sonuç şudur:

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

Çünkü sonuç, xmltürü, birini belirtebilirsiniz xmlveri türü yöntemleri doğrudan karşı bu xml aşağıdaki sorgu gösterildiği gibi. Sorgu, query() yöntemi (xml veri türü) ilk almak için kullanılan <row> öğe alt <myRoot> öğesi.

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ç şudur:

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

İç for xml sorgu sonuçları xml türü örnekleri olarak dış sorguları döndüren

Sen-ebilmek yazmak iç içe FOR XMLburada iç sorgunun sonucu olarak döndürülür sorgular bir xmldış sorgu türüne. Örneğin:

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:

  • İç tarafından oluşturulan xml FOR XMLdış tarafından oluşturulan xml sorgu eklenir FOR XML.

  • İç sorgunun belirtir TYPEyönergesi. Bu nedenle, iç sorgu tarafından döndürülen xml veri olduğunu xml türü. type yönergesi belirtilmezse, iç sonucu FOR XMLsorgu olarak döndürülen nvarchar(max)ve xml verilerini entitized.

Sonuç xml verileri şeklini denetleme

İç içe for xml sorgular sonuç xml verileri şeklini tanımlayan daha fazla denetim sağlar. Kısmen özniteliği merkezli ve kısmen öğe merkezli bir xml oluşturmak için iç içe for xml sorguları kullanabilirsiniz.

Özniteliği merkezli ve öğe merkezli bir xml ile iç içe for xml sorguları belirtme hakkında daha fazla bilgi için xml sorgu için iç içe for xml sorgu için karşılaştırıldığındave Şekil xml ile iç içe for xml sorguları.

xml sorgu için iç içe auto modu belirterek kardeşleri içeren xml hiyerarşileri oluşturabilirsiniz. Daha fazla bilgi için, bkz. Kardeşleri ile iç içe auto modu sorgusu oluşturmak.

Kullandığınız hangi modu ne olursa olsun, sonuç xml şekli açıklayan daha fazla kontrol için iç içe for xml sorguları sağlar. Açık modu sorguları yerine kullanılabilirler.

Örnekler

Aşağıdaki konular, iç içe for xml sorguları örnekleri sağlar.