問題タブ [sqlxml]
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.
xquery - XQueryを使用したSQLXML列の子ノードへのアクセス
XML列を持つテーブルを持つデータベースがあります。XMLデータには、次のような子ノードが多数あります。
Cat要素には、さまざまな値を設定できます。このデータに関するレポートを作成しようとしているので、データ全体のすべてのカテゴリのリストを取得したいと思います。これは私の質問です:
これにより、このタイプの分類でテーブル内のすべての行が正しく取得されます(その要素がない同じテーブルには他の結果があります)が、カテゴリはすべて、テーブルレコードごとに1つの列に結合されます。
Id列を含めているので、データがどこから来ているのかを簡単に確認できます。主な問題は、各行の値を連結するためにしか取得できないことです。これらの各データ要素には独自の行が必要です。次に、結果に対してSelectDistinctを実行します。
それができる方法はありますか?
ありがとう
sql-server-2008 - 大規模な XML 列に対する複雑なクエリの SQL アセンブリとアプリケーション コード
いくつかのリレーショナル列と、かなり大きなデータのチャンクを保持する 1 つの XML 列を含むテーブルがあります。データベースを使用する単純な Web サービスもあります。XML 列内の特定の要素のすべてのインスタンス、特定の要素のすべての個別の値のリストなどについてレポートできる必要があります。
要素の個別の値すべてのリストを取得できましたが、それ以上のことはできませんでした。C# では非常に単純に見えることを実行するために、非常に複雑な T-SQL コードを作成することになりました。つまり、このテーブルのすべての行を調べて、これ ( XPath | XQuery | XSLT ) を XML 列に適用します。リレーショナル列をフィルター処理してデータ量を減らすことができますが、一部のクエリでは依然として大量のデータです。
私の計画は、SQL Server (私は 2008 SP2 を使用しています) にアセンブリを埋め込み、特定のクエリに対してその場でインデックス付きビューを作成することでした (このビューをクリーンアップする他のロジックが必要です)。これにより、ネットワーク トラフィックを抑えることができ、Excel や MSRS レポートなどのツールを安価なユーザー インターフェイスとして使用できる可能性もありますが、多くの人が「SQL アセンブリではなくアプリケーション ロジックを使用するだけ」と言っています。 . (私はここで間違ったツリーを完全に吠えている可能性があると思います).
大量のデータを Web サービスに取得し、そこで処理を行うことにも利点があります。SQL Server 環境による制約が少なくなり (その中に住んでいないため)、セットアップ プロセスがより簡単になります。しかし、ネットワーク経由で大量のデータを取り込み、処理中にメモリに保存し、その一部を破棄していることは確かです。
ここでアドバイスをいただければ幸いです。
ありがとう
編集:
ありがとうございます。問題は、ファイルのテーブルに行を生成していて、各ファイルが複数の結果を持つ可能性があり、特定のビルド ジョブを実行するたびにこれを行っていたことです。これをテーブル ビューにフラット化したかったのです。
このビルド ジョブを実行するたびに、数千のファイルのいくつかの属性がチェックされ、場合によっては、これらの各テストで数千の結果が生成されていました (MSIVAL テストが最悪の原因でした)。
答えは (当たり前!) 、データベースに入る前にフラット化することです! あなたのフィードバックに基づいて、各ファイルの各テストの各結果の行を作成してみることにしました。XML にはその 1 つの結果の詳細のみが含まれていました。これにより、クエリがはるかに簡単になりました。もちろん、このツールを実行するたびに数十万行になりますが、パフォーマンスははるかに優れています。ビルド ジョブによって出力される結果のクラスの 1 つのフラット化されたバージョンを作成するビューができました。これは、200,000 を超えて返され、5 秒未満かかります。これまでの同等の (複雑な) クエリの場合は約 3 分でした。よりフラットなルートで、古い (データベースではない) バージョンの XML ファイル処理に 10 ~ 30 分かかります。
現在、接続回数に問題がありますが、それを修正する方法について考えています。
再度、感謝します!+1 のすべてのラウンド
xml - SQL Server FORXMLAUTOヘルプ-ChildNode名
私はこのクエリを持っています
[ほぼ]必要なXMLを生成します。子ノードの名前は単に間違っています。エイリアスの切り替えを何度も試みましたが、一生の間、正しい方法を見つけることができません。このXMLを取得しています
[Activity]子ノードの名前が正しくなるように問題を修正するにはどうすればよいですか。かなり近い気がします。ヘルプ、ヒント、またはトリックをありがとう。
サンディエゴで乾杯、〜ck
xml - フラグメント内のSQLServer2008 XML更新?U
5万行のSQLServer2008テーブルがあり、それぞれのvarchar
列に次のようなXMLフラグメントがあります。
列を選択し、money属性を選択varchar
して、実際のmoneyタイプ(私の例では3399.40)に変更してから、フラグメント全体を元に戻す必要があります。
誰かが私にこれを乗り越える方法を教えてもらえますか?ある種のXMLインデックスを作成する必要があると思いますか?混乱している。
ありがとう。
asp.net - SQLXMLCommand のエラーと IIS 6.0 への展開
ASP.NET アプリケーションを VS2010 から IIS 6.0 Web サーバーに移動しようとすると、エラーが発生します。このエラーは、アプリがログイン ページで新しい SQLXMLCommand オブジェクトを初めて作成しようとしたときに発生します。
ログイン ページに移動して有効な資格情報を入力すると、null 参照例外がスローされたというエラーが表示されました。例外を調査したところ、別の例外がスローされてキャッチされ、コードの後半で null 参照例外が発生したことが判明しました。
例外をスローする対応するコード行:
以下の問題を引き起こす例外:
次のエラーが原因で、CLSID {83D0FC3E-8B31-4B35-A1B2-346BA3954514} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 80040154 クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG))。" System.Runtime.InteropServices.COMException (0x80040154): CLSID {83D0FC3E-8B31-4B35-A1B2-346BA3954514} を持つコンポーネントの COM クラス ファクトリの取得は、次のエラーが原因で失敗しました: 80040154 クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG)) System.RuntimeTypeHandle で.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) at System.RuntimeType.Microsoft.Data.SqlXml.SqlXmlCommand.fillManagedWrapper() で Microsoft.Data.SqlXml.SqlXmlCommand.construct( ) Microsoft.Data.SqlXml.SqlXmlCommand..ctor(String cnString) at dialog.login.UserLogin(String username, St 2011-Jun-15 11:40:52.104 CriticalError N/A 58 "http://sigappsdv/dialogue /login.aspx" dialog.login.UserLogin ---> "Webservice failed 2 at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow(ブール publicOnly、Microsoft.Data.SqlXml.SqlXmlCommand.fillManagedWrapper() の System.Activator.CreateInstance(型の種類、ブール値の nonPublic) の System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly、Boolean skipVisibilityChecks、Boolean skipCheckThis、Boolean fillCache) の Boolean skipCheckThis、Boolean fillCache) Microsoft.Data.SqlXml.SqlXmlCommand.construct() で Microsoft.Data.SqlXml.SqlXmlCommand..ctor(文字列 cnString) で dialog.login.UserLogin(文字列ユーザー名、文字列パスワード、文字列 lang)"Microsoft.Data.SqlXml.SqlXmlCommand..ctor(String cnString) での construct() dialog.login.UserLogin(String ユーザー名、String パスワード、String 言語) で"Microsoft.Data.SqlXml.SqlXmlCommand..ctor(String cnString) での construct() dialog.login.UserLogin(String ユーザー名、String パスワード、String 言語) で"
問題をさらに詳しく調べると、例外は Web サーバーでのみスローされます。localhost を使用している場合、例外はスローされません。Microsoft.Data.SqlXml.dll への参照が欠落している可能性がありますが、Web サーバーではなく localhost で動作していたためです。展開プロジェクトにdll参照を含め、それがbinフォルダーに追加されていることを確認して、これを修正しようとしましたが、役に立ちませんでした。
助けてくれてありがとう。
編集:
SQLXML 4.0 は Web サーバーにインストールされていませんでした。これは、私のマシンのベースライン インストールの一部でした。
asp.net - ASP.NETアプリをWebサーバーに展開する際の問題
アプリケーションをローカルマシンからWebサーバーに移動するときにエラーが発生しました。(ローカルホストでエラーが発生していません)
例外をスローするコードを以下に示します。
例外をスローしている特定の行は次のとおりです。DimoXRAsXmlReader = cmd.ExecuteXmlReader()
ロギング情報により、以下の例外が明らかになりました。
例外#1:
ユーザーログイン-例外がスローされました:SQLOLEDBまたはSQLNCLIをデータプロバイダーとして指定する必要があります。 "Microsoft.Data.SqlXml.SqlXmlException:SQLOLEDBまたはSQLNCLIをデータプロバイダーとして指定する必要があります。---> System.Runtime.InteropServices.COMException:SQLOLEDBまたはSQLNCLIをデータプロバイダーとして指定する必要があります。Microsoft.Data.SqlXml.Common.UnsafeNativeMethods.ISQLXMLCommandManagedInterface.ExecuteToOutputStream()at Microsoft.Data.SqlXml.SqlXmlCommand.innerExecute(Stream strm)---内部例外スタックトレースの終了- --Microsoft.Data.SqlXml.SqlXmlCommand.ExecuteStream()、Microsoft.Data.SqlXml.SqlXmlCommand.ExecuteXmlReader()、dialogue.login.UserLogin(String username、String password、String lang)
例外#2:
"ユーザーログイン-スローされた例外:HRESULTからの例外:0x80040E14" Microsoft.Data.SqlXml.SqlXmlException:HRESULTからの例外:0x80040E14 ---> System.Runtime.InteropServices.COMException:HRESULTからの例外:Microsoft.Data.SqlXmlの0x80040E14。 Common.UnsafeNativeMethods.ISQLXMLCommandManagedInterface.ExecuteToOutputStream()at Microsoft.Data.SqlXml.SqlXmlCommand.innerExecute(Stream strm)---内部例外スタックトレースの終了--- Microsoft.Data.SqlXml.SqlXmlCommand.ExecuteStream() dialog.login.UserLogin(String username、String password、String lang)のData.SqlXml.SqlXmlCommand.ExecuteXmlReader()
最初の例外は、SQLOLEDB.1をプロバイダーとして使用して発生した最初のエラーです。さまざまなプロバイダーを試してみて、2番目の2番目の例外を取得しました。
何か案は?
sql - SQL 2008 への複数の XML レコードの挿入と更新 - 解決策ですが、正しい解決策ではないでしょうか?
さて、次の 2 つのテスト/サンプル クエリを使用して、XML から SQL 2008 テーブルにデータを INSERT および UPDATE します。着信 XML 構造が SQL テーブルの構造と一致するという、かなり基本的なことです (当然、更新には必要なフィールドのみが含まれます - これも単なる例です)。
ステートメントを挿入
したがって、問題はありません。必要に応じて 2 つの XML「レコード」が挿入されます。次に、UPDATE ステートメントについて説明します。
更新ステートメント
よし、更新がうまくいった - 2 つの XML「レコード」のコメント フィールドが、渡された値に基づいて更新された。
私の質問は
もちろん、上記のサンプルの UPDATE では、WHERE 句は TEST テーブルではなく XML からのものです。したがって、UPDATE が実行されると、クエリは 100 を示します (たとえば、テーブル TEST にあるレコードの数) レコードが更新されました..もちろん、更新されたのは 2 つのレコード (この場合) だけですが、SQL はテーブル全体を実行する必要がありましたか?? それが理にかなっている場合、基になる TEST テーブルに添付された XML の where 句をどうにかして持つ方法があると思いますか? つまり、更新された項目のみに TEST を制限しますか?
xml - SqlXml: OLEDB のドライバーが間違っていますか?
このストアド プロシージャを sqlxml から実行しようとしています。プロファイラーでトラフィックを監視しているため、コマンドがSQLサーバーに到達しないことはわかっています。パラメーターはなく、私の Exec ステートメントはこれを反映しています。レジストリに OLEDB_SERVICES の値があり、動作する他のコードで接続文字列をテストしました。oledb のドライバーが間違っている可能性があると思いますが、ドライバーが何であるかを理解し、それを置き換える方法がわかりません。
エラー メッセージは次のとおりです。複数ステップの OLE DB 操作でエラーが発生しました。利用可能な場合は、各 OLE DB ステータス値を確認します。作業は行われませんでした。
sql-server - SolrドキュメントへのSQL Select FOR XML
Solr 標準に準拠する XML を生成する SQL 選択ステートメントを取得しようとしています。
次のようなテーブルがあるとします。
次のような結果が必要です(ルートノードの有無にかかわらず):
クエリを使用してその構造を生成することは可能FOR XML
ですか? または、そのスキーマに一致する XSLT またはその他のメカニズムが必要ですか?
sqlxml - SQL Server 2008 R2 SQLXML および xpath クエリ フィルターが機能しない
SQL xml を実行すると、次のスキーマが 4 つのプロジェクトを返します。
私は手に入れたい:
ただし、実行するとフィルタリングされません。私が使用する xpath-query は次のとおりです。
これは私が得るものです:
次のクエリを使用する場合:
iati-acitivties 要素なしで以下を取得します。
私が間違っていることを知っている人はいますか?