T-SQL'de bir XML Dizesindeki özniteliklerde çift tırnak nasıl kaçabilirim?


174

Oldukça basit bir soru - Çift tırnak içine almak istediğim bir özelliğim var. Onlardan nasıl kaçarım? denedim

  • \"
  • ""
  • \\"

Ve hepsi için @xml değişkenini hem xml tipi hem de varchar (max) yaptım.

 declare @xml xml --(or varchar(max) tried both)

 set @xml = '<transaction><item value="hi "mom" lol" 
    ItemId="106"  ItemType="2"  instanceId="215923801"  dataSetId="1" /></transaction>'

 declare @xh int
 exec sp_xml_preparedocument @xh OUTPUT, @xml

 insert into @commits --I declare the table, just removed it for brevity
 select
    x.*
 from openxml(@xh,'/transaction/item')
  WITH (
    dataItemId int,
     dataItemType int,
    instanceId int,
    dataSetId int,
    value varchar(max)
  ) x

1
Bu arada ... burada openxml kullanmak için hiçbir neden (AFAIK) yok ... "2005 öncesi" şeyler. Bir xml değeriniz varsa, bunu doğrudan xml olarak kullanın.
Marc Gravell

Marc - Teşekkür ederim. Ben openxml kıvırcık apostrophes ile sona erdi sonuçlanan başka bir hata vardı: 'Ben google bulmak için bir soru / cevap olarak göndereceğiz düşünüyorum.
Tom Ritter

Yanıtlar:


273

Bu &quot;xml içinde olmaz mı? yani

"hi &quot;mom&quot; lol" 

** düzenleme: ** test edilmiş; iyi çalışıyor:

declare @xml xml

 set @xml = '<transaction><item value="hi &quot;mom&quot; lol" 
    ItemId="106"  ItemType="2"  instanceId="215923801"  dataSetId="1" /></transaction>'

select @xml.value('(//item/@value)[1]','varchar(50)')

4

tSql başka bir çift tırnak ile bir çift tırnak kaçar. Eğer sql string değişmezinizin bir parçası olmasını istiyorsanız, bunu yapardınız:

declare @xml xml 
set @xml = "<transaction><item value=""hi"" /></transaction>"

Xml içindeki bir değerin içine bir teklif eklemek istiyorsanız , şu şekilde görünen bir varlık kullanırsınız:

declare @xml xml
set @xml = "<transaction><item value=""hi &quot;mom&quot; lol"" /></transaction>"

4
En iyisi çift dize SQL dize sınırlayıcı olarak kullanmamak. Tek tırnak işaretleri ANSI standardıdır ve QUOTED_IDENTIFIER ayarından bağımsız olarak her zaman çalışır.
bobince

Katılıyorum, ama ne yapmaya çalıştığı konusunda herhangi bir karışıklık olması durumunda bunun mümkün olduğunu göstermek istedim.
Joel Coehoorn

4

Artık yorum yapamam ama oy verdi ve millet &quot;, Solr RegexTransformer için regex ifadeleri oluştururken xml yapılandırma dosyaları için çok iyi çalıştığını bilmek istedim : regex=".*img src=&quot;(.*)&quot;.*"çift ​​tırnak yerine kaçan sürümü kullanarak.


2

Bir tam dizeyi test etmek için Jelly.core'da şunlar kullanılır:

&lt;core:when test="${ name == 'ABC' }"&gt; 

Ama eğer "Toy's R Us" dizesini kontrol etmek zorunda kalırsam:

&lt;core:when test="${ name == &amp;quot;Toy&apos;s R Us&amp;quot; }"&gt;

Çift tırnak içine girmesine izin verilirse şöyle olur:

&lt;core:when test="${ name == "Toy's R Us" }"&gt; 
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.