問題タブ [sqlclr]
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.
sql-server - CLR 関数から SQL Server イベントを受け取る
SQL Server 2005 データベースで関数としてリンクされているいくつかのメソッドを含む CLR クラスを作成しました。これらの関数のいくつかが 1 つのトランザクションまたは接続の範囲内で使用される場合、トランザクションまたは接続のクローズ時に、一部のものをクリーンアップするために別の関数を自動的に実行する必要があります (現時点ではどちらの時間でも構いませんが、後で決定します)。最高です)。別の新しい CLR 関数からイベントを受け取ることはできると思いますが、それを達成する方法がわかりません。
CLRクラスでトランザクションまたは接続終了イベントを受信する方法、またはこれらのイベントが発生したときに特定の関数を実行する方法を理解するのに役立つモジュール、ドキュメントなどに関する情報を誰か教えてもらえますか?
編集: 値を格納するための静的メンバーと、メンバーから値を設定および取得するための 2 つの静的メソッドを使用して C# クラスを作成しました。DLL としてコンパイルされ、アセンブリとして SQL Server 2005 に追加されました。メソッドは CLR 関数として同じサーバーに追加されました。さまざまな接続とトランザクションを組み合わせて値を交互に取得および設定すると、静的メンバーがリセットされていないことがわかりました。保存された値を 1 つのトランザクションまたは接続に含める (または静的メンバーをクリーンアップする) 自動的な方法を望んでいます。
c# - SQL ストアド プロシージャからの発信接続を構成する方法
Microsoft SQL サーバーを使用する .NET プロジェクトに取り組んでいます。このプロジェクトでは、リモート Web サービスを使用する CLR ストアド プロシージャ (C# で記述) が必要です。そのため、ストアド プロシージャが SQL サーバーで実行されると、Web サービス呼び出しが行われ、パケットがリモートの場所に送信されます。問題は、SP を実行すると、「System.Net.WebException: The request failed with HTTP status 403: Forbidden」というメッセージが表示されることです。
データベースユーザーには完全な権限があり、展開されたCLRアセンブリとSPは「安全ではない」とマークされています。署名しようとしたなど、問題は発生していません。
まったく同じ C# コードを実行していますが、SP としてではなく単純なコンソール アプリケーションから実行すると、すべて正常に動作します。そのため、ネットワーク関連の問題を疑い始め、SP とコンソール アプリ バージョンの両方を実行するときにパケット スニファーを実行していました。
私が気付いたのは、送信されたパケットの宛先 IP アドレスが異なることでした。コンソール アプリはパケットを Web サービス IP に直接送信し、SP はパケットを社内で使用しているプロキシ サーバーに送信しました。ネットワーク ポリシーにより、後者は許可されておらず、「403 Forbidden」例外が説明されています。
したがって、私の質問は次のようになります。SP/MS SQL サーバーがそのプロキシを使用しないように構成するにはどうすればよいですか? テスト コンソール アプリと同じように、パケットを Web サービス IP に直接送信する必要があります。(繰り返しますが、C# コードは同じなので、プログラミングの問題ではありません)。
SQL サーバーがこれらの設定などを継承する場合に備えて、Internet Explorer のすべてのプロキシ設定を無効にしました。しかし、運が悪い。
どんな助けでも大歓迎です!
よろしく、ピーター
parsing - ブール論理を解析するにはどうすればよいですか?
ブール論理言語を SQL WHERE 句に変換するブール論理パーサーを作成する必要があります。
オペランドの順序は常に正しい順序になります (右側に値があります)。
これは比較的単純な例です。ネストされた括弧や NOT 演算子の使用などがある可能性があります。
WHERE 句は次のようになります。
.net - CLR SQLアセンブリ:バイトストリームを取得しますか?
デプロイしたいSQLCLRdllがありますが、バイトストリーム/ varbinary_literal / varbinary_expression / assemblyビットをテキストファイルに埋め込んで、DLLをパッケージ化し、CREATEASSEMBLYでアクセスできるようにするという面倒な作業を回避できることがわかりました。コマンド。
しかし、私がまだ見つけていないのは、そのバイトストリーム/ varbinary_literal /varbinary_expression/アセンブリビット値を取得する方法です。一貫性のある用語は見つかりませんでした。また、を使用して見つけ続けているものもありませんLoad()
。
sql-server - 可変数のパラメーターを使用したCLRUDFの作成
渡された文字列値のリストの中で最大のものを見つける関数が必要でした。
SQLサーバーからSelectgreatest('Abcd'、'Efgh'、'Zxy'、'EAD')として呼び出したい。Zxyを返すはずです。パラメータの数は可変です。ちなみに、これはoracleGREATEST関数と非常によく似ています。そこで、非常に単純なCLR関数(Vs2008)を作成し、それをデプロイしようとしました。下記参照
しかし、コンパイルまたはデプロイしようとすると、次のエラーが発生します。データ型SqlString[]が見つかりません。
SQL CLRを使用して私の要件を満たすことは可能ですか?
c# - SQL CLR および null 許容日時パラメーター
入力として DateTime2 を受け取り、別の DateTime2 を返す SQLCLR 関数を作成しようとしています。この投稿に基づいて、パラメーターを C# 型の DateTime に変更し、必要な精度のレベルを提供しました。ただし、入力は null になる可能性があるため、DateTime にしたいと思いますか?; 戻り型も。
問題は、デプロイしようとすると次のエラーが発生することです。
エラー 1 タイプ 'Nullable`1' が見つかりません。存在しないか権限がないためです。SqlServer.関数
Sql Server 2008 と Visual Studio 2008 を使用しています。
mysql - MySQL データベースから MS SQL にレコードをインポートするための最適なソリューション (1 時間ごと)
維持していない MySQL データベースに保存されているレコードを Sql Server 2005 データベース (x64) にインポートする必要があります。
一定間隔で (おそらく 1 時間) レコードをインポートする必要があります。
通常のインポートを実行するための最良の解決策は何ですか?
- Windows サービス (参照 MySql.data dll を使用)
- Windows クライアント (自動化できる)
- SQL 拡張ストアド プロシージャ (MySQL.data dll を参照できますか?)
- SSIS パッケージ - MySQL ODBC ドライバーのインストール
#4 の問題は、SQL サーバーで ODBC ドライバーをサポートしたくないということです。
#3のx86 MySql.data dllをx64 SQLサーバープロセスに参照できるかどうかさえわかりません。(または、SQL Server プロジェクト内でその dll を参照できる場合)
.net - SQL CLR ユーザー関数で使用するために System.DirectoryServices を登録する方法は?
サーバーへの読み取りと書き込みを目的として書き込まれた古い 32-bit COM
コンポーネントを移植しています。新しいソリューションが導入され、ユーザー関数 が使用されます。VB6
Active Directory
C#
SQL CLR
展開しようとしているアセンブリにSQL Server
は、への参照が含まれていますSystem.DirectoryServices
。プロジェクトはエラーなしでコンパイルされますSQL Server
が、次のエラーのため、アセンブリをに配置できません:
Error: Assembly 'system.directoryservices, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.' was not found in the SQL catalog.
System.DirectoryServices
SQL Serverに登録するための正しい手順は何ですか?
sql-server - CREATE ASSEMBLYが検証に失敗しました:この操作を完了するのに十分なストレージが利用できません
SQL Server2005ExpressとCLRストアドプロシージャを使用する小さなアプリケーションがあります。XPおよびVistaを実行している多くのコンピューターに正常にインストールされ、実行されています。
アセンブリを作成するには、次のSQLを実行します(無実の人を保護するために名前を変更します)。
Vistaを実行していて非常に厳しいセキュリティポリシー制限がある1台のコンピューター(インストール対象の他のコンピューターを反映するテストマシン)で、次のエラーが発生します。
メッセージ6218、レベル16、状態2、サーバードメイン\サーバー名、行2
アセンブリ'myAssembly'の検証に失敗したため、アセンブリ'myAssembly'のCREATEASSEMBLYが失敗しました。参照されているアセンブリが最新であり、データベースで実行するのに信頼できる(external_accessまたは安全でない)かどうかを確認します。このメッセージの後にCLRベリファイアのエラーメッセージが続く場合[:myProcSupport.Axis :: Proc1] [mdToken = 0x6000004][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis :: Proc2] [mdToken = 0x6000005][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis :: Proc3] [mdToken = 0x6000006][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis::。ctor][mdToken = 0x600000a][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis :: Proc4] [mdToken = 0x6000001][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis :: Proc5] [mdToken = 0x6000002][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis :: Proc6] [mdToken = 0x6000007][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis :: Proc7] [mdToken = 0x6000008][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis :: Proc8] [mdToken = 0x6000009][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis :: Proc8] [mdToken = 0x600000b][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません。
[:myProcSupport.Axis :: Proc9] [mdToken = 0x600000c][HRESULT0x8007000E]-この操作を完了するのに十分なストレージがありません...。
C#DLLはSAFE
、データベースに含まれるデータのみを使用するため、定義されています。DLLは通常署名されていませんが、テスト用に署名されたバージョンを提供し、同じ結果を受け取りました。
インストールは他の誰かによって行われていて、私はボックスにアクセスできませんが、彼らは私が提供したスクリプトを実行していて、他のコンピューターで動作しています。
スクリプトの結果が提供する以上のこのエラーに関する情報を見つけようとしましたが、役立つものは何も見つかりませんでした。
アセンブリを作成するためのスクリプトを実行する人は、管理者アカウントでログインし、管理者としてCMDを実行し、Windows認証を介してDBに接続し、dbo_ownerロールに追加され、サーバーロールSysAdminに追加されます。権限の問題であること。これは何も変わっていません。
この環境では、SQL Server 2005 Expressを別の方法で構成する必要がありますか?
このエラーは、SQLCMDからの出力以外の場所に記録されていますか?このエラーの原因は何ですか?Vistaのセキュリティポリシーがこれを引き起こす可能性がありますか?
私はコンピューターにアクセスできない(顧客がテストを行っている)ので、自分で箱を調べることはできません。
TIA
c# - テーブルをパラメータとしてSQLCLRTV-UDFに渡します
ソース情報のDataTableを操作していくつかの有用な値を生成できるサードパーティのDLLがあり、SQLServer2008でテーブル値のUDFとして呼び出せるようにSQLCLRを介して接続しようとしています。
ここでの概念をさらに一歩進めて、DBからのソースデータのテーブルを操作するCLRテーブル値関数をプログラムしたいと思います。
T-SQL側で何が必要かを理解していると確信しています。しかし、メソッドシグネチャは.NET(C#)コードではどのように見えるべきでしょうか?「SQLServerからのテーブルデータ」のパラメータデータ型は何でしょうか。
例えば
lat / lon-> distanceはばかげた例であり、もちろんSQLで完全に処理する方がよいでしょう。しかし、SQLCLRアセンブリに関連付けられたテーブル値UDFを介したテーブルイン->テーブルアウトの一般的な意図を示していることを願っています。
これが可能かどうかはわかりません。SQLCLRInitMethodメソッドのシグネチャはC#ではどのようになりますか?
それが不可能な場合は、C#コード内で「contextconnection = true」SQL接続を使用して、関連するキーを指定して必要なデータをCLRコンポーネントにクエリさせることができます。ただし、これはDBスキーマの変更に敏感です。したがって、SQLにすべてのソースデータをバンドルさせて、それを関数に渡すことを望んでいます。
ボーナスの質問-これがまったく機能すると仮定すると、複数の入力テーブルでも機能しますか?