問題タブ [for-xml-path]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tsql - XML パス vs より多くの接続
注文と関連データをリストするグリッドが必要です。(純粋に架空の例)
簡単にするために:
グリッドは各注文を表示する必要がありますが、各コレクションのテキストによる説明も表示する必要があります。
現在、このグリッドには最大 200 行が含まれる場合があります。
この問題は、私たちが使用するオーダーメイドの ORM には、複数の PK の結果セットを一意のオブジェクトにマッピングする際に、いくつかの重大な速度低下の問題があることです。
例えば。
結果セットに 1 つのコレクションが含まれている場合でも、この問題が発生します。クエリ自体は問題なく高速に実行されます。問題はマッピングです。
したがって、実際には2つのオプションが残っています(私が見る限り):
注文の結果セットを取得し、結果セット内の注文ごとに、パーツをフェッチし、目的地をフェッチし、サプライヤーをフェッチします。これは、DB への 601 回の呼び出しを意味します。
FOR XML PATHを使用して、各コレクションをグループ化します。より多くの CPU を集中的に使用し、大量の初期クエリを読み取ることを意味します。
第一に、上記の 2 つのアプローチのどちらがより優れているように見えるか、そして第二に、私が思いもよらなかった他のより良いアプローチがあるかどうかを考えています。問題は、両方とも厄介なオブジェクト マッパーを使用する必要があることです (このクエリの結果セットのためだけに独自の DAL マッピング プロシージャを作成することはできません)。
何か案は?
ありがとう。
sql-server - T-SQL FOR XML PATH を使用して空の XML ノードを削除する
FOR XML PATH
SQL Server 2008R2 のテーブルから XML を構築するために使用しています。XML は次のように構築する必要があります。
スキーマ ファイルによると、InnerContainerElement
はオプションですが、InnerNodeOne
は必須です。スキーマ ファイルは私が設定したものではなく、非常に複雑で、相互に参照し、明示的な XSD 名前空間を持たないため、データベースに簡単にロードできません。
XML は、次のクエリを使用して入力されたテーブルから作成する必要があります。
を使用してこの XML を構築するには、2 つの方法が考えられますFOR XML PATH
。
1) XML サブクエリからの名前付き結果として「InnerContainerElement」を使用する:
2) XML サブクエリからの出力要素として「InnerContainerElement」を使用しますが、名前を付けません。
ただし、いずれも望ましい結果をもたらしません。どちらの場合も、結果は次のようになります。
が空の場合は常にInnerContainerElement
、空の要素として表示されます。スキーマによると、これは無効です。要素InnerContainerElement
が XML にInnerNodeOne
ある場合は常に、これも必要です。
空の場合は常に が除外されるFOR XML PATH
ようにクエリを作成するにはどうすればよいですか?InnerContainerElement
sql - XMLファイルを階層形式で生成したい
私はこのようなテーブルを持っています(実際には6000以上のレコードが含まれています)
DDL:
インサート:
そして、私はこのようなXMLファイルを生成したい(単純化されたツリーのような構造)
このテーブルにはテーブルに60000を超えるレコードがあるため、パフォーマンスが劇的に低下するため、再帰を使用したくありません。
この出力 XML を使用してリクエストを送信するので、出力を同じ形式で取得できれば幸いです。
さらに重要なことは、本質的に動的であることです。
sql - for xml path による文字列の連結
やあ!今日for xml path
、mssql で文字列を連結するテクニックを学びました。私は mssql で xml を扱ったことがなく、Google も役に立たなかったので、あなたに尋ねる必要があります。
デフォルトのケースを想像してみましょう。テーブルからいくつかの文字列を連結する必要があります。
したがって、次のようになります。
Ok。それは正常に動作します。しかし、非常によく似た連結ブロックが 2 つあります。違いは、結果の文字列が次のように見えることだけです。
[str1], [str2], [strn]
とisnull([str1], 0) as [str1], isnull([str2], 0) as [str2], isnull([strn], 0) as [strn]
したがって、異なる文字列コンストラクターを使用して 2 つの非常によく似たコード ブロック (既に完了しています) を記述したり、前のコードを拡張して 2 種類のコンストラクターを含む xml 変数を作成したり、xml ノード タイプで連結したりできます。2番目の方法でいくつかの問題に遭遇しました-私はこれを書きました:
しかし、エラーが発生します"XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'"
。
たとえば、'/name'
to'/name[1]'
またはその他のを置換すると、 '/name[x]'
x 番目の 'name' レコードだけが返されますが、連結されたすべての 'name' レコードは返されません。
[質問] : 私が望むように第 2 の方法で問題を解決することは可能ですか。
[免責事項] : 今のところ、問題はそれほど深刻ではありません (最初の方法は少し醜いだけでなく、問題ありません)。
sql-server - FOR XML を使用して子クエリを返す
SQL Server 2008 で SELECT ステートメントのパラメーターとして以下のサブクエリを実行しています。親の子クエリを取得し、返されたときにサーバー上で解析するためにこれを行うことの欠点はありますか。簡単そうです。
xml - 「FORXMLPATH」を使用するときに文字エンコードを回避するにはどうすればよいですか?
JanetOharaの質問のように、SQLServer2005テーブルから値のコンマ区切りリストを作成しようとしています。techdoの質問への回答に示されているものと同様のクエリを使用しています。
値のリストがXMLエンコードされていることを除いて、すべてが機能しています。あるべきもの:
代わりに次のように返されます:
SQLServerで「FORXML」を使用するときにXML文字エンコードを無効にする方法はありますか?
c# - SQL クエリ - gridview の XML パス クエリを使用して単一の行を表示する方法
ModuleStaff
( 、Staff
、 )から取得する 3 つのテーブルがありRoles
ます。私がやろうとしているのは、データをグリッドビューに 1 行で表示することです。たとえば、staff(adrian)
グループ番号 1 と 2 の担当者は次のように表示されます。
現在、チューターとリーダーのデータベースデータが空白であっても、同じstaff(adrian)
ロール名で問題が発生しています。groupnumbers (1 and 2)
私が今得たもの:
あるべき姿:
これが私のコードです:
rolename
およびに基づいてグループ番号を取得するために、XML パス/SQL ステートメントをクエリする方法がよくわかりませんstaffname
。誰でもこれについて私を助けることができますか? ありがとうございました。
sql - XML の明示的なネスト データの場合
結局、これに答えました-XML明示を使用しなければならない他の不幸な魂を助ける場合に備えて、以下に概説します:)
以下に含まれる XML を出力する次のコードがあります。私が直面している問題は、各request_status_updateセクションにshipping_infoおよびassociated_pin_padセクションが 1 つずつあるはずですが、それらはすべて最後のrequest_status_updateのみに表示されるということです。
代わりに、XML PATH を使用してこの種のネストを行う方法を誰かが教えてくれれば、その方が簡単かもしれません。私も大賛成です。1 つのヘッダー セクションを取得する方法がわかりませんでしたが、それでも複数の request_status_update セクションを取得できませんでした。XML PATH は、ヘッダー セクションだけではなく、常に行ごとに何かを行うことを期待しているようです。
これについて何か助けてくれてありがとう。私はそれが長いコードであることを知っています(それについて申し訳ありません)
SQL コード:
XML OUTPUT: (これは問題領域であるため、request_status_updates セクションのみが含まれています。
期待される出力:
修理:
この order by 句を追加する必要がありました。
さらに、Tag 4 のクエリから始めて、並べ替えが機能するように、NULL ではなく RequestID が実際に結果に含まれていることを確認する必要がありました。
また、XML EXPLICIT よりも単純であるはずの XML PATH を使用することも検討しますが、これまでのところ、これは機能しています。