問題タブ [clrstoredprocedure]
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.
c# - SQL CLRはfinallyブロックが実行されていることを確認します
大量の行セットを取得するために使用されるSQLサーバーCLRストアドプロシージャがあり、プロセスを実行して別のテーブルのカウントを更新します。
フローは次のとおりです。
選択 -> プロセス -> カウントの更新 -> 選択した行を処理済みとしてマーク
このプロセスの性質上、同じデータ セットを 2 回カウントすることはできません。また、SP は GUID を引数として呼び出されます。
そのため、現在処理中の GUID のリストを (SP の静的リストに) 保持し、現在処理中の GUID が終了するまで、同じ引数を使用して SP への後続の呼び出しの実行を停止します。
プロセスが最終ブロックで終了したときに GUID を削除するコードがありますが、毎回機能しているわけではありません。最終ブロックを呼び出さずに SP が終了し、リストから GUID を削除せずに SP が終了するインスタンス (ユーザーが SP の実行をキャンセルした場合など) があるため、後続の呼び出しは無期限に待機し続けます。
いつでも1つのIDのみが処理されていることを確認するための解決策や、最終ブロックが何に関係なく呼び出されるようにする解決策を教えてください。
処理ビットを削除したコードのサンプルを次に示します。
sql - 行全体を SQL CLR 関数/sproc に渡す
Forename、Surname、Address1 などの列を含む SQL テーブルで複雑な文字列操作を実行する必要があるプロセスがあります。
このデータ操作を実行するために、さまざまな SQL CLR C# 関数をセットアップしましたが、行全体を 1 つの CLR 関数または sproc に渡したいと考えています。
これを行う最善の方法は何ですか?
テーブル値パラメーターを作成してから SQL CLR SPROC を作成してデータを受け入れることを考えていますが、データは読み取り専用になりますか、それとも C# でデータ操作を実行して新しいデータ セットを返すことができますか?
何か案は?
c# - CLR ストアド プロシージャ呼び出しからテーブル変数を返す
XST を使用して、渡された XML をシュレッドおよび検証する既存の CLR があります。データ ポイント (XML 自体は気にしない) を、データベース テーブルに直接挿入できるテーブルにキャプチャしたいと考えています。したがって、CLRストアドプロシージャを呼び出すと、数百または行の4列が返され、単純に実行できます
SP である必要はなく、UDF である可能性もあります...私の本当の質問は、CLR からテーブルを返す方法です。テーブル定義も渡すことができる必要があります。したがって、CLR によって返されるテーブルについては、4 つの列名と型を変数として CLR への呼び出しの一部にしたいと考えています。
誰かがこれで私を助けることができれば、私は非常に感謝し、非常に感銘を受けます。非常に熟練した人に尋ねたところ、動的テーブルを持つCLRに到達したとき、および/またはテーブルを返すCLRに到達したときに、全員が手を投げ出しました。まったく。
ありがとう!
c# - SQL CLR と .net の統合
私は .net 2008 を使用して 1 つの Web サイトを開発しています。私のプロジェクトは Web サイト タイプで、SQL CLR 統合を使用しています。CLR 統合は初めてです。
ここで、この「abc」ストアド プロシージャが SQL でどのように呼び出されるかを知りたいと思います。新しいプロジェクトを使用してから、SQL サーバー プロジェクトを使用する必要がありますか? しかし、私はウェブサイトに統合したい。ステップバイステップの解決策を教えてください。
sql-server-2008-r2 - CLR ストアド プロシージャからテーブルを返す
過去に次のようなコードを使用して、CLR ストアド プロシージャからデータを返しました。
ここでは、ODBC を使用して Sybase ASE データベースにアクセスする必要があります (そのため、SqlCommand を使用するのではなく、OdbcCommand を OdbcConnection と共に使用します)。OdbcDataReader を使用して結果セットを取得できますが、これを SqlContext.Pipe に渡すことはできません。
SqlContext に相当する Odbc はありますか、または結果セットを返す方法を教えてもらえますか。
sql-server-2008-r2 - CLR ストアド プロシージャから行数を返す
次のようなストアド プロシージャがあるとします。
これを (標準の java.sql ライブラリから) 使用して呼び出すとexecuteUpdate
、更新された行数が Java プログラムに返されます (もちろん、update ステートメントがテーブル内の行を更新すると仮定します)。
ただし、次のようにコーディングされた CLR ストアド プロシージャを実行すると、次のようになります。
その後、Java プログラムは更新された行数を取得しません (値 -1 が返されるようです)。SET NOCOUNT ON
これは、SQL ストアド プロシージャに入力した場合にも発生します。
したがって、CLRストアドプロシージャが使用されているかのように機能するように見えますSET NOCOUNT ON
。
SQL ストアド プロシージャの場合と同じ方法で行数を取得できるように、CLR ストアド プロシージャをコーディングする方法はありますか? 残念ながら、Java プログラム (これはサードパーティのコンポーネントです) を変更して、たとえば OUTPUT パラメータを取得することはできません。私は SqlContext.Pipe を見てきましたが、明らかなものは何もありません。また、行数が executeUpdate プロシージャに返されるメカニズムもわかりません。
問題を回避するためにハックを作成することはおそらくできますが (たとえば、Java は SQL ストアド プロシージャを実行し、それが CLR ストアド プロシージャを実行します)、可能であれば、コール スタックに別のレイヤーを導入したくありません。
sql-server - SQL Server データベースにインストールされているアセンブリから、SQL Server データベースのローカル テーブルを一般的に参照するにはどうすればよいですか?
does_stuff()
SQL サーバー データベースにインストールしたメソッドを含むアセンブリがあるとします。このメソッド/storedproc がデータベース内の特定の既知のテーブルを参照するようにします。それ自体がホストされている場所を知らずdoes_stuff
に、テーブルの内容にアクセスするにはどうすればよいですか?
does_stuff
table にアクセスすることになっているとしましょうinfo_config
。データベースでホストされている場合ALPHA
、アクセスALPHA.info_config
します データベースでホストされている場合BETA
、アクセスしますBETA.info_config
ADO.NETでDB接続などを開く方法は知っていますが、特定のサーバーとデータベース文字列が必要です。アセンブリがホストされている場所に関係なく同じことを実行できるように、柔軟性が必要です。
Google 検索では何も表示されません。
前もって感謝します
sql - MS SQL Server 2008 で CLR ストアド プロシージャ内の行を選択する方法は?
インターネットで見つけた例に従って、MS SQL Server 2008 で CLR ストアド プロシージャを実装する次の C# コードを作成しました。
このプロシージャは、文字列をパラメーターとして取り、文字列内の文字数を出力します。
SQL からデータを取得するコードに取り組んできました。データを取得する方法に特別なことはありません。SQL サーバーに接続し、データを選択してから、接続を閉じます。このコードを SQL サーバーのストアド プロシージャまたはトリガー内で実行したいと考えています。
コードを既存の SQL コードとまったく同じように実行できると思います。つまり、SQL サーバーに接続し、データを選択してから、接続を閉じます。ただし、コードが SQL サーバー自体で実行されると、これは意味がありません。SQL サーバー上で実行されるコードで、サーバーをそれ自体に接続する必要があるのはなぜですか?!?!
私がやろうとしていることのベストプラクティスはありますか? ストアド プロシージャの実行に使用されるのと同じ接続を使用して、コード内の行を選択できますか?