xml yolu ('') çıkışı için


9

Aşağıdakileri çalıştırdığımda

select t.type
  from (values ('Green'),('Blue'),('Red')) as t(type)
   for xml path('')

Bu çıktıyı alıyorum

<type>Green</type>
<type>Blue</type>
<type>Red</type>

Aşağıdakileri çalıştırırsam

select t.type + '/'
  from (values ('Green'),('Blue'),('Red')) as t(type)
   for xml path('')

Bu çıktıyı alıyorum

Green/Blue/Red/

Seçime bitiştirmeyi neden eklemek, xml dosyasındaki bir satırdaki tür etiketlerinin ve çıktının kaldırılmasına neden oluyor? SQL Server 2012 çalıştırılıyor.

Yanıtlar:


15

XML bonkers

Birleştirilmiş dizeyi eklediğinizde, "yol öğesini" kaybedersiniz.

Örneğin, bunu yaparsanız:

SELECT t.type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('');

SELECT t.type + '/' 
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('type');

Bunu geri alıyorsunuz:

<type>Green/</type>
<type>Blue/</type>
<type>Red/</type>

Sütun adı veya diğer adı yol öğesi olarak işlev görür.

Yardımcı olabilecek diğer bazı örnekler

kullanma RAW, ELEMENTS

SELECT t.type + '/'
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;

SELECT t.type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;

İlk örnekte, genel "satır" öğe adını alırsınız, ancak ikincisinde satır / tür alırsınız.

Kullanırken RAW, TYPE:

SELECT t.type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;

SELECT t.type + '/'
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;

İlk sorgu geçerli-ish XML döndürür, ikincisi yol öğesinde bir tanımlayıcı bulunmadığından bir hata atar.

Kullanıldığında AUTO, tablo diğer adı ve sütun adı yola dönüşür:

SELECT type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;

SELECT type 
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;

Ancak takma ad olmadan benzer bir hata alırsınız:

SELECT type + '/'
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;

Bir örnek alırdım FOR XML EXPLICITama şimdi içmeye başlamak benim için sorumsuz olurdu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.