0

だから私はcheckboxlistASP.NETフォームを持っています。ストアド プロシージャ ( ) の句checkboxesの一部として選択された の ID が必要です。非常に単純明快です。たとえば、ユーザーが, ,を選択すると、私の手順では . の値を要求します。私は動的ステートメントを実行できず、クエリを動的に作成したくないので、XML が適切な選択であると考えました。 INSQL Server 20081247TranCode IN (1,2,4,7)IN

このようにVB.NETでXML文字列を構築しています -<chargecode><refnum>1</refnum><refnum>2</refnum></chargecode>など で同じフィールドTranCodeRefNum表しています.トランザクションテーブルと説明テーブルの間で名前が異なるだけrefnumなので、必要に応じてXMLで別のものに変更できますが、私は間違いなくTranCode比較列に使用する必要があります。

ストアド プロシージャ@ChargeCodesXMLで、VB.NET から渡された XML 文字列を格納する という XML 変数を宣言しました。基本的に必要なことは、XML ファイルからすべての refnum フィールドを取り出して と比較することだけTranCodeです。手順にはいくつかの結合、いくつかの集計関数、グループ化などがありますが、基本的には次のようなものが必要です

SELECT * FROM SomeTable WHERE TranCode IN (SELECT RefNum FROM MyXMLFile)  

私はあちこち検索して、複雑な XML クエリをたくさん見てきましたが、必要なものほど単純なものはなかったので、目にする例に圧倒されてしまいました。この非常に単純な比較のために proc を変更する方法を教えてください。

ありがとう!マイク

4

2 に答える 2

2

このようなものがあなたの問題を分類するはずです:

SELECT * FROM SomeTable WHERE TranCode IN (
  SELECT
    ChargeCode.RefNum.value('.', 'INT')
  FROM
    @ChargeCodesXML.nodes('/chargecode/refnum') AS ChargeCode(RefNum)
)

このクエリの重要な部分は、nodesメソッドを使用して XML をシュレッドすることです。SQL Server 2008 で XML の作業にかなりの時間を費やす予定がある場合は、これを読んでおくことをお勧めします。

于 2012-09-26T20:47:05.570 に答える
1
SELECT * 
FROM SomeTable 
WHERE TranCode IN (
                  SELECT T.N.value('(./text())[1]', 'int')
                  FROM @ChargeCodesXML.nodes('/chargecode/refnum') AS T(N)
                  )
于 2012-09-26T20:43:04.450 に答える