1

MS SQL Server 2008 と Visual Studio の Express バージョンしか持っていません。SQL Serverプロジェクトを作成できないため、CLRソリューションは問題外であるため、使用しようとしました

select col1, stuff( ( select ' ' + col2
from StrConcat t1
where t2.col1 = t1.col1
for xml path('')
),1,1,'')
from StrConcat t2
group by col1
order by col1

col2 を連結した行を取得します。col2 は、 &\nなどの制御文字を含む varchar フィールドです。上記の SQL と連結すると、それらの制御文字をエスケープするように見えます。&になります & ; \nは &#xOD になりますが、これは私がやりたいことではありません。col1 と連結されたフィールドが別のテーブルを更新するために使用されることを考えると、連結されたフィールドをエスケープされていない元の形式で取得する最良の方法は何ですか?それとも何もなく、外部コードに頼るしかありませんか?

テーブル スキーマは次のようになります: StrConcat (id int primary key, col1 int, txt varchar(80)) col1 にはインデックスがあり、txt は col1 でグループ化され、グループ内で ID 順に並べられる必要があります。

4

1 に答える 1

1

もちろん、この動作は仕様によるものです。この方法でエスケープしないと、クエリは無効な XML を出力する可能性があります。

SQL Server 内でエスケープされていない値を取得する必要がある場合は、他の連結方法のいずれかを使用する必要があります(通常、再帰 CTE は、CLR 集計と の次に効率的FOR XMLですが、最も書きにくいものです)。

もちろん、これがアプリケーションに直接渡される場合は、.NET でXmlReaderクラスを使用するなど、そこでアンエスケープする方がはるかに簡単です。

于 2010-04-08T03:06:30.033 に答える