問題タブ [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.
web-services - Web サービスへの GetResponse() 呼び出しで SQL Server CLR プロシージャがハングするのはなぜですか
環境: C#、.Net 3.5、Sql Server 2005
スタンドアロンの C# コンソール アプリケーション プロジェクトで機能するメソッドがあります。データベース内のデータから XMLElement を作成し、プライベート メソッドを使用してそれをローカル ネットワーク上の Web サービスに送信します。このテスト プロジェクトで VS から実行すると、5 秒未満で実行されます。
クラスを CLR プロジェクトにコピーしてビルドし、SQL Server にインストールしました (WITH PERMISSION_SET = EXTERNAL_ACCESS)。唯一の違いは、デバッグ用に追加した SqlContext.Pipe.Send() 呼び出しです。
SSMSクエリウィンドウからEXECUTEコマンドの1つのストアドプロシージャ(CLR内)を使用してテストしています。それは二度と戻りません。1 分後に呼び出しの実行を停止すると、最後に「 http://servername:53694/odata.svc/Customers/を使用して GetResponse() を呼び出しています」と表示されます。SQL Server 内で実行するときに GetResponse() 呼び出しが返されない理由について何かアイデアはありますか?
c# - xmlを含むparamを含むSQLCLR関数からSystem.Diagnostics.Process.Startを呼び出します
SQL Server2008CLRプロジェクトにストアドプロシージャがあります。この関数は、いくつかのxmlを含むパラメーターを使用してコンソールアプリケーションを呼び出します。
ここでのxmlを含むparamの問題。これは、ストアドプロシージャを実行するための式です。
ストアドプロシージャを実行した後、次のようなエラーが発生しました。
<現時点では予想外でした。
xmlがないと、すべてが正しく機能していることに気づきたいです。
c# - VisualStudioなしでSQLCLRストアドプロシージャインストールスクリプトを生成する方法
VS2010を使用してCLRストアドプロシージャに取り組んでいます。この手順を顧客のサーバーにインストールするには、スタンドアロンの展開スクリプトを生成する必要があります。現在、F5キーを押してDBサーバーでSPをデバッグしようとすると、このようなスクリプトを生成するVisualStudioを使用しています。このスクリプトはbin\Debug\MyStoredProcedure.sql
ファイルに配置されます。次のようになります。
Visual Studioなしでそのようなスクリプトを生成することは可能ですか?たとえば、MSBuildを使用してソリューションをビルドし、ツールを使用してこのスクリプトを生成するとどうなりますか?アセンブリをバイト配列として読み取り、それを16進文字列にシリアル化してスクリプトテンプレートに挿入すると、機能する可能性があると思いますが、もっと簡単な標準ソリューションがあるのではないでしょうか。
ありがとう。
sql-server - SQLステートメントからのSQLServerストアドプロシージャジェネレータ?
SQLステートメントからSQLServerストアドプロシージャ(つまりトリガー)を生成するフリーウェアを知っている人はいますか?
つまり、基本的なCRUDストアドプロシージャだけが必要ではないということです...私が探しているのは、次のようなものです。
次のようなSQLステートメントを使用します。
そして、完全なストアドプロシージャステートメントを発行します。
c# - CLR ストアド プロシージャのグローバル例外ハンドラ
C# と Sql Server 2008 を使用しており、CLR ストアド プロシージャにいくつかの try/catch ブロックがあり、これらがキャッチされます。これらはファイルに記録され、SqlPipe を使用してコード エラーとメッセージを返します。これらは罰金です。トラップされていないエラーがいくつかある場合、特にログ ファイルにトレースを記録するために、同じことを行う必要があります。
Application.ThreadException を使用しようとしましたが、このクラスは CLR ストアド プロシージャ (WinForms) では使用できません。エントリの Sql プロシージャ メソッドでいたずらな try/catch ブロックを使用する必要がありますか、それとももっと良い方法がありますか?
ありがとう。
c# - 暗号化のための SQL CLR ストアド プロシージャ
背景:システム A からプロファイル データを読み込み、システム B に対応するプロファイルとメンバーシップ ユーザーを作成する SSIS パッケージがあります。システム B は、SSIS パッケージによって生成されたパスワードを解読できる必要があるカスタム ASP.NET メンバーシップ プロバイダーを使用します。SSIS パッケージで使用されるソルト生成と暗号化のための CLR ストアド プロシージャを作成しました。
問題:暗号化されたパスワードを ASP.NET メンバーシップ プロバイダーで解読できるようにするには、CLR ストアド プロシージャで使用される MachineKey を設定する必要があります。これを行う方法、または可能かどうかさえわかりません。
Reflector を使用して、必要な暗号化コードを System.Membership dll から取り出しました。少しリファクタリングすると、次のようになります。
問題はSymmetricAlgorithm.Create()
、MachineKey で定義された初期ベクトルを使用してデフォルトの対称アルゴリズムを作成することです。
どんな助けでも大歓迎です。また、より簡単な別のアプローチがあれば教えてください。
ありがとう。
tsql - CLR sproc、nvarchar(max) を受け入れるオブジェクト パラメーター
任意の列からパラメーターとして値を取得する CLR ストアド プロシージャがあります。タイプがobject / sql_variantの場合、すべての可能な列をパラメーターで処理するには、次のようにします。
タイプの列からデータを渡すと、次のnvarchar(max)
ようになります。
「オペランド型の衝突: nvarchar(max) は sql_variant と互換性がありません」。
パラメータが文字列だった場合は、長さ > 4000 の列を受け入れるように宣言するSqlChar
か、装飾することができます。オブジェクトに対してはどのように行われますか?[SqlFacet(MaxSize=-1)]
clr - CLR ストアド プロシージャ
CLR ストアド プロシージャで暗号化 API を使用したいと考えています。
CLR ストアド プロシージャを作成し、select ステートメントを記述しました
ここで、暗号化メソッドを使用するデータベースに暗号化された形式で保存されている従業員番号を使用して結果をフィルター処理したいと考えています。
からレコードをフィルタリングする方法に行き詰まっていますSqlDataReader
。
SqlDataReader
CLRストアドプロシージャから複数のレコードを返すには、1つのメソッドがSqlContext.Pipe.Send()
あり、このメソッドはオブジェクトのみを受け入れますSqlDataReader
。
私を案内してください。
sql-server - CLR SPからの結果データを切り捨てる必要がある場合にEXECを挿入するにはどうすればよいですか?
CLRストアドプロシージャから返された結果セットをテーブル変数に挿入しています。結果セット内の一部の文字列の長さが一時テーブルで定義されたvarchar制限を超えているため、「System.Data.SqlClient.SqlException:文字列またはバイナリデータが切り捨てられます」というエラーが発生します。厄介なのは、切り捨てはまさに私が欲しいものです!
では、ストアドプロシージャの結果セットを挿入するときに、その結果セット(の文字列)を切り捨てるにはどうすればよいですか?
CLRSPのコードは変更したくありません。挿入されるデータの文字列は任意の長さです。
sql-server - SQL Server の clr ストアド プロシージャで動的 .net コードを実行する方法
SQL Server の CLR プロシージャのコードを動的に変更する方法はありますか?
ビジネス ロジックを含むアセンブリが MS SQL Server 2008 R2 にデプロイされているとします。このアセンブリ (またはアセンブリ) は常に使用されています (たとえば、複数の同時クエリでテーブルの各行に対していくつかの関数を呼び出すなど)。したがって、アセンブリをドロップすることはできません。ビジネス ロジックを動的に変更する方法や、変更可能な外部コードを実行する方法はありますか?
私はすでにこれらのアプローチを検討しましたが、どれもうまくいきませんでした:
- Reflection.Emit
- モノセシル
- SQL Server に配置されたアセンブリへの外部アセンブリの読み込み
更新: 質問はリリース プロセスに関するものではありませんでした。GUI を介していくつかのセキュリティ ルールを動的に設定できるようにしたいと考えています。
たとえば、一部のユーザーは、アドレスのないクライアントや昨年の取引などのみを表示できる必要があります。
ルールは複雑ではありませんが、ほぼ毎日変更される可能性があり、コードに入れることはできません。ビジネス ロジックの残りの部分は、TSQL で実装されます。CLR が選択されたのは、パフォーマンスの問題 (動的 SQL が遅すぎる) のためです。
別のオプションがありました: クラスター化されたビューを生成します (WHERE セクションにルールを使用) が、十分な速さではありませんでした。
詳細:
大きなテーブル dbo.Transactions の一部を選択するコードがあるとします。
結果をフィルタリングして許可された行を表示する場合は、インデックス付きビューを生成し、次のように結果セットと結合できます。
しかし、実行計画を確認すると、ほとんどの場合、クエリ アナライザーは dbo.Transaction をフィルター処理してから vw_Transactions に結合するのではなく、最初に結合して後でフィルター処理することを決定します (これは絶対に望ましくありません)。FORCE ORDER のようなヒントは役に立ちません。