Zusätzliche Zeichen beim verwenden von XML-PFAD
Ich habe eine Tabelle namens Map_Data und die Daten sieht wie folgt aus:
ID SoCol Descol
125 case Per_rating when 5 then 'Good' when 4 then 'Ok' else null end D_Code
Und ich schrieb eine Abfrage, die auf dieser bestimmten Zeile und die Abfrage ist:
SELECT Params = ( SELECT DesCol + ' = ''' + SoCol + ''''
FROM dbo.Map_Data t1
WHERE ID = 125
FOR
XML PATH('')
)
und ich bekomme als Ausgabe :
D_Code = 'case per_rating
 when 5 then 'Good'
 when 4
 then 'Ok'
 end'
Kann mir jemand sagen, warum ich bin immer '
'
es und wie kann ich es korrigieren?
Überprüfen Sie den Inhalt der Mapdata , mir denkt es gibt #13 (Carriage Returns). Sie könnte nicht sichtbar sein, was auch immer Sie verwenden, um die Anzeige der Tabelle Inhalt. Gegeben, wo Sie sind, es sieht SoCol wurde geschönt.
InformationsquelleAutor peter | 2012-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese kleine änderung macht das hässliche Entitäten verschwinden, aber Sie nicht beseitigen Wagenrücklauf (Blick auf die Ergebnisse in Ergebnisse in Text, nicht Ergebnisse zu Raster, um Sie zu sehen):
Wenn Sie wollen, um loszuwerden, das CR/LF auch Sie sagen können:
Auch ich bin mir nicht sicher, wie Sie gehen zu verwenden, die Ausgabe aber, wenn Sie gehen, um Sie zu bewerten später mit dynamischem SQL sind Sie gehen zu müssen, ersetzen die embedded single-quotes (
'
) mit zwei einfachen Anführungszeichen (''
). Sonst wird es zu Blasen, weil Sie auch string-Begrenzungszeichen.Bitte beachten Sie, dass die Verwendung
.value
ist viel langsamer als ohne. Ich hatte eine UDF voll von solchen anrufen und es verursacht einiges an performance-hit.Toll. Können Sie zeigen, wie man die gleiche Ausgabe ohne Verwendung
.value
?Sie kann es nicht. Das ist der Nachteil. Wenn möglich, können Sie Sie filtern den Wert im code der Anwendung. Das kann ganz gut funktionieren, in vielen Fällen, aber einige Abfragen auf Ihre Params-Spalte kann nicht gut funktionieren, weil entkam XML werden in die Mitte.
Ok, also, wenn Benutzer die Datenbank zurückgegeben, die gewünschte Leistung, dann Sie können nicht verwenden Sie Ihren Ansatz. Es bekam.
InformationsquelleAutor Aaron Bertrand
Können Sie auch erreichen dies, indem Sie einfach halten Sie alle den code in das einzelne Anführungszeichen in einer Zeile. Auch ich hatte ähnliche Problem und es wird gelöst, indem der gesamte code in einer Zeile.
InformationsquelleAutor Rizwan Ahmed