2012-02-16 14 views
11

を使用している間、私はMap_Dataと呼ばれるテーブルを持っており、データは次のようになります。余分な文字のXML PATH

ID SoCol                Descol 
125 case Per_rating when 5 then 'Good' when 4 then 'Ok' else null end D_Code 

そして、私は、この特定の行でクエリを書いて、クエリは次のとおりです。

SELECT Params = (SELECT DesCol + ' = ''' + SoCol + '''' 
        FROM  dbo.Map_Data t1 
        WHERE ID = 125 
        FOR 
        XML PATH('') 
       ) 

と私は出力を得る:

D_Code = 'case per_rating
 when 5 then 'Good'
 when 4
 then 'Ok'
 end' 

私は'
'それを取得しています、なぜ誰も私を伝えることができると私はそれをどのように修正することができますか?

+1

Mapdataの内容を確認すると、#13(キャリッジリターン)があると思います。これらは、表の内容を表示するために使用しているものでは表示されないことがあります。彼らがどこにいるかを考えれば、SoColは見事に見えた。 –

答えて

15

(それらを見るために、グリッドへの結果、テキストに結果における結果ではない見て)このわずかな変化は醜い実体が離れて行くようになりますが、彼らはキャリッジリターンを排除しません。

SELECT Params = (SELECT DesCol + ' = ''' + SoCol + '''' 
        FROM  dbo.Map_Data t1 
        WHERE ID = 125 
        FOR 
        XML PATH(''), TYPE 
       ).value('.[1]', 'nvarchar(max)'); 

あなたはCR/LFを取り除きたい場合は、あまりにもあなたが言うことができます。

SELECT Params = (SELECT REPLACE(REPLACE(DesCol + ' = ''' + SoCol + '''', 
    CHAR(13), ''), CHAR(10), '') 
        FROM  dbo.Map_Data t1 
        WHERE ID = 125 
        FOR 
        XML PATH(''), TYPE 
       ).value('.[1]', 'nvarchar(max)'); 

はまた、私はあなたが出力を使用するつもりかどうかはわかりませんが、あなたはダイナミックで、後でそれを評価するつもりならSQLでは、埋め込まれた単一引用符(')を2つの単一引用符で置き換える必要があります('')。それ以外の場合は、文字列区切り文字でもあるので、それは爆発します。

+0

ありがとうございました!!! – peter

+0

'.value'を使用すると、を使用するよりもずっと遅くなります。私はそのような呼び出しでいっぱいのUDFを持っていたので、かなりのパフォーマンスが発生しました。 – Sebazzz

+0

@Sebazz素晴らしい。 '.value'を使わずに同じ出力を得る方法を教えてください。 –

0

また、すべてのコードを一重引用符で囲むだけで、これを実現できます。私も同様の問題を抱えていて、すべてのコードを1行にまとめることで解決します。