問題タブ [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.

0 投票する
1 に答える
6287 参照

sql - SQL CLR ストアド プロシージャと Web サービス

現在、CLR ストアド プロシージャから Web サービスのメソッドを呼び出す必要があるタスクに取り組んでいます。

背景のビット:

基本的に、私は大量のクランチを必要とするタスクを持っています。厳密に SQL で実行すると、処理に約 30 ~ 45 分かかります。同じプロセスをコードに取り込めば、処理をより効率的に最適化できるため、数秒で完了することができます。唯一の問題は、このプロセスを SQL Server で自動タスクとして設定する必要があることです。

その意味で、プロセスを Web サービスとして公開し (他の目的にも使用します)、SQL CLR sproc がサービスを使用してコードを実行するようにします。これにより、タスクを自動化できます。

問題:

CLR Sproc で Web サービスを使用する方法に関するさまざまなトピックを読み、効果的に実行しました。これが私が従ったものの例です。

http://blog.hoegaerden.be/2008/11/11/calling-a-web-service-from-sql-server-2005/

この例を問題なく動作させることができます。ただし、このプロセスとデータベース呼び出しを含む Web サービス メソッドを組み合わせると、次の例外が発生します (try / catch でラップするかどうかによって異なります)。

メッセージ 10312、レベル 16、状態 49、プロシージャ usp_CLRRunDirectSimulationAndWriteResults、行 0 .NET Framework の実行が中止されました。UDP/UDF/UDT はスレッド トークンを元に戻しませんでした。

また

メッセージ 6522、レベル 16、状態 1、プロシージャ MyStoredProc 、行 0

ユーザー定義ルーチンまたは集計 'MyStoredProc' の実行中に .NET Framework エラーが発生しました:

System.Security.SecurityException: タイプ 'System.Security.Permissions.EnvironmentPermission、mscorlib、Version=2.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089' のアクセス許可の要求が失敗しました。

System.Security.SecurityException:

System.Security.CodeAccessSecurityEngine.Check (オブジェクトの要求、StackCrawlMark & stackMark、ブール値 isPermSet) で

System.Security.CodeAccessPermission.Demand() で

System.Net.CredentialCache.get_DefaultCredentials() で

System.Web.Services.Protocols.WebClientProtocol.set_UseDefaultCredentials (ブール値) で

MyStoredProc.localhost.MPWebService.set_UseDefaultCredentials (ブール値) で

MyStoredProclocalhost.MPWebService..ctor() で

MyStoredProc.StoredProcedures.MyStoredProc (文字列 FromPostCode、文字列 ToPostCode) で

これは許可の問題だと確信していますが、私の人生ではそれを機能させることはできません。CLR sproc で偽装を使用しようとしましたが、他にもいくつかあります。助言がありますか?私は何が欠けていますか?

0 投票する
1 に答える
2574 参照

sql-server - CLR Stored Procs のマルチスレッド コード?

マルチスレッドの CLR ストアド プロシージャは可能ですか?

並列化の可能性が高い、データ集約型のタスクがあります。CLR Stored Procs は、データをプロセス外に移動するオーバーヘッドを取り除くのに最適です。並列コンピューティングをあきらめなければならないのではないかと心配しています。

私のオプションは何ですか?

注: SQL Server 2005 を使用しており、4 か月以内に SQL Server 2008 にアップグレードする計画があります。

0 投票する
1 に答える
699 参照

c# - 切断されたデータセット内の複数のテーブルからSQLServerに変更を送信する

ストアドプロシージャを呼び出すためのXMLRPCメカニズムを使用して呼び出しを受け入れるサードパーティアプリケーションがあります。

このメカニズムを使用して、更新/削除/挿入の束を含む複数のテーブルを含むZIP圧縮データセットを送信します。一方、CLR sprocはデータを解凍し、データセットを取得します。

次に、次のコードが実行されます。

RowUpdatingイベントのイベントハンドラーは次のとおりです。

およびCreateUpdateCommandメソッド:

ただし、レコードが多い場合、これは非常に遅くなります。

これを最適化する方法、または複数のテーブルで大量の更新/削除を送信するまったく異なる方法はありますか?これにはTSQLを使用したいのですが、データセットを通常のsprocに送信する方法がわかりません。

その他の注意事項:

  • SQLServerデータベースに直接アクセスすることはできません。
  • 圧縮せずに試しましたが、遅くなりました。
0 投票する
2 に答える
1977 参照

msbuild - ビルド サーバーの CLR Storedprocedure プロジェクトで MSBuild を実行中にエラーが発生しました

ビルド サーバー (Team City) で MSBuild を使用して CLR Storedprocedure プロジェクトをビルドすると、次のエラーが発生します。

エラー MSB4019: インポートされたプロジェクト "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\SqlServer.targets" が見つかりませんでした。宣言のパスが正しいこと、およびファイルがディスク上に存在することを確認します

ファイルがディスク上に存在するかどうかを確認しましたが、存在しないことを確認しました。自分のマシンで確認しましたが、存在します。

ファイルを手動でビルド サーバーにコピーすることは本当にしたくありません。

proj ファイルにインポートされている csproj ファイルの行は次のとおりです。

Team City Server によって実行されている proj ファイルの行は次のとおりです。

私の質問は本当に:

このファイルはどこから来たのですか? たとえば、Visual Studioのインストールの一部ですか..または、ビルドサーバーでこのプロジェクトをコンパイルできるようにするための再配布パッケージがどこかにありますか?

ありがとう

ところで..ファイルをビルドサーバーにコピーするだけで、実際には機能します。

デイブ

0 投票する
1 に答える
1590 参照

c# - VS での CLR udf プロジェクトの展開エラー - SQL カタログに system.core 3.5 が見つかりません

この記事で説明されているように、CLR ストアド プロシージャと UDF を構築しています。

http://www.codeproject.com/KB/cs/CLR_Stored_Procedure.aspx

Build > Deploy を実行すると、次のエラーが表示されます。

エラー: アセンブリ 'system.core, version=3.5.0.0, culture=neutral, publickeytoken=b77a5c561934e089.' が SQL カタログに見つかりませんでした。

.NET 3.5 でいくつかのクラスを使用していることに注意してください。

どうすればこれを修正できますか? 私は Sql Server Express にデプロイしていますが、本番環境では Sql Server 2005 になります。

0 投票する
1 に答える
281 参照

sql-server - CLRストアドプロシージャ

ASP.NETアプリケーションでは、データベースに対して実行するために、かなり複雑で頻繁に使用される操作がいくつかあります。これらの操作では、いくつかのテーブルの1つ以上が、特定のテーブルの入力パラメーターと値の両方の論理評価に基づいて更新または挿入する必要があります。ロジックとデータアクセスの分離を維持しているので、操作は現在次のようになります。

  1. クライアントから受け取ったリクエスト
  2. ビジネスレイヤーはデータレイヤーを呼び出してデータベースからデータを取得します
  3. ビジネスレイヤーは結果を処理し、実行する操作を決定します
  4. ビジネスレイヤーは適切なデータ操作を呼び出します
  5. クライアントに送信された応答

ご覧のとおり、データベースに対して2つの個別の要求が行われている間、クライアントは待機し続けます。これに対する解決策を探しているときに、CLRストアドプロシージャを見つけましたが、それらが何に役立つかについて正しい考えがあるかどうかはわかりません。

上記のコードの代わりに、特にステップ2〜4をCLRSPに配置するものを作成しました。私の理解では、SPはSQL Serverによってローカルで実行され、サーバーに対して1回の呼び出しのみが行われます。

私の質問は基本的に、これはCLR SPの使用目的ですか、それとも何かが足りないのですか?

これは構造的に少し妥協していることを理解しているので、もっと良い方法があれば聞いてみたいと思います。

0 投票する
3 に答える
1340 参照

sql-server - データ処理タスクでのSQLServerCLRストアドプロシージャ-良いか悪いか?

つまり、CLRストアドプロシージャにほとんどのビジネスロジックを実装することは、優れた設計ソリューションですか?

私は最近それらについて多くを読みましたが、それらがいつ使用されるべきか、ベストプラクティスは何であるか、それらが十分に良いかどうかを理解することができません。

たとえば、私のビジネスアプリケーションは

  • 大きな固定長のテキストファイルを解析し、
  • ファイルの各行からいくつかの数字を抽出し、
  • これらの数値によると、いくつかの複雑なビジネスルール(正規表現のマッチング、データベース内の多くのテーブルのデータに対するパターンマッチングなど)が適用されます。
  • この計算の結果として、データベースのレコードが更新されます。

ユーザーがファイルを選択したり、結果を表示したりするためのGUIもあります。

このアプリケーションは、データレイヤー、ロジックレイヤー、GUIレイヤーという従来の3層アーキテクチャを実装するのに適しているようです。

  • データレイヤーはデータベースにアクセスします
  • ロジックレイヤーはWCFサービスとして実行され、データレイヤーと対話してビジネスルールを実装します。
  • GUIレイヤーは、ロジックレイヤーとユーザー間の通信手段になります。

この設計を考えると、ほとんどのビジネスルールがSQL CLRに実装され、SQLServerに格納されていることがわかります。すべての生データをデータベースに保存し、そこで処理を実行して、結果を取得する場合があります。このソリューションにはいくつかの長所と短所があります。

長所

  • ビジネスロジックはデータの近くで実行されるため、ネットワークトラフィックが少なくなります。
  • 並列処理と最適な実行プランを利用して、すべてのデータを一度に処理します。

短所

  • ビジネスロジックの分散:一部はここにあり、一部はそこにあります。
  • 疑わしい設計ソリューションは、未知の問題に遭遇する可能性があります。
  • 処理タスクの進行状況インジケーターを実装するのは困難です。

SQLCLRについてのご意見をお聞かせください。誰かがそれを本番環境で使用していますか?そのようなデザインに何か問題はありますか?いいことですか?

0 投票する
2 に答える
3934 参照

sql - SQL構文エラーCREATEPROCEDUREAS EXTERNAL

質問:IFが存在しない場合を外部名ステートメントとして作成プロシージャに追加すると、構文エラーが発生します...なぜですか?別々に実行すると、両方のステートメントが正常に機能します...

0 投票する
1 に答える
148 参照

sql - スクリプトからストアド プロシージャが配置されている DB をトレースする

ストアド プロシージャが配置されている DB をクエリする方法はありますか? この一連のデータベースが互いに多くのクロス DB クエリを実行しているのですが、1 つのストアド プロシージャで迷子になり、どの DB にあるのかを調べたいだけです。そのストアド プロシージャがある場所の DB 名を返すスクリプトを作成したいと考えています。

これは可能ですか?

0 投票する
2 に答える
1475 参照

sql-server-2005 - 「トークンを解決できません」というエラーで CREATE ASSEMBLY が失敗するのはなぜですか?

C# で記述された SQL 2005 CLR コードを使用しています。最近、いくつかの関数を変更して NULL パラメータを許可しました。これは、パラメーターを「double」型から「SqlDecimal」型に変更することで実現しました。開発中の変更のテストに成功し、更新を運用サーバーに展開するようになりました。SQL スクリプトを使用してサーバーから既存のコードを削除し、更新されたアセンブリと関連オブジェクトを作成します。開発とテストで使用した SQL スクリプトは変更なしで本番サーバーにデプロイされていますが、そこで実行するとエラーが表示されます。

このエラーをグーグルで検索しましたが、適切なものが見つからないようです。私たちが行った変更では、新しい参照や変更された参照はありませんでした。そのため、サーバーから欠落している何かに関連しているとは思いません。コードは以前はかなり長い間そこで機能していました。ここで何が起こっているか知っている人はいますか?