問題タブ [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.
c# - DataSet を使用した SQL Server サービス ブローカー
SQL Server 2005 でコンソール アプリケーションをService Brokerから実行するように変換しています。
アプリケーションはDataSetを多用します。
DataSet は SQLCLR で動作するはずですか? 使用する接続を定義するにはどうすればよいですか? これに関するドキュメントはありますか?
ご協力いただきありがとうございます!
sql-server - SQL CLR アセンブリからレコードセットを返す
みんなのリースが私を助けてくれます 私は近くにいると思いますが、何かが足りない.
バックグラウンド
SQL CLR アセンブリ (ストアド プロシージャ) を書き直しています。アセンブリは別のリソースに接続し、XML を取得します。この XML をスカラー値ではなく、レコードセットとして返したいと考えています。
私が見たものから、これはレコードセットを返す方法です:
Sendメソッドは、次の 3 つのパラメーターを受け取ります。
SqlDataReaderクラスにはコンストラクターがありません。SqlCommand.ExecuteReader() はどのようにコンストラクターを返しますか?
私がしなければならないと思うこと
- IDataReaderから継承する独自のクラスを作成します 。
- このクラスで XML を使用し、それをレコードとして公開します (DataReader など)。
- SqlDataReader をオーバーライドし、これを SqlContext.Pipe.Send(mySqlDataReader) に渡します ???
ここがぼやけます。
カスタム レコードセットを SQL Server に戻すにはどうすればよいですか?
sql-server - SQLCLR のデータ アクセス パターン
私は自分のプロジェクトで SQLCLR を使用していますが、記録としては、非常に満足しています。しかし、適切なデータ アクセス パターンに関する適切な情報源が見つかりません。
データベース用の API が常に必要なため、通常はストアド プロシージャを使用して .net と SQL 間の通信を行います。ただし、この場合、.net コードは API の一部であるため、SP は不適切に見えます。
Linq2SQL は SQL サーバーには存在しないため (ただし、DBA が好まない方法でインストールすることはできます)、オプションではありません。
私が現在持っているのは、次のような標準の ADO.NET コードで雑然としたコードです。
そして、それは機能しますが、それを行う方法が間違っているように思えます.
他の人はどのようにしていますか?
c# - Windowsサービス(c#)にDBテーブルの変更(sql 2005)を通知する方法は?
SQL2005データベースに負荷の高い(多くの挿入/更新/削除)テーブルがあります。これらすべての変更に対して、可能な限りリアルタイムに近い状態で後処理を実行したいと思います(テーブルをロックしないように非同期で)。私はいくつかの可能な解決策を探しましたが、正しいと感じる1つのきちんとした解決策を見つけることができないようです。
後処理の種類もかなり重いので、Windowsリスナーサービスは実際に処理を多くのマシンに渡します。ただし、アプリケーションのこの部分はすでに稼働しており、完全に非同期であり、私が支援を必要としているものではありません-これは、CLRオブジェクトをロードすることができないという点で、設計上の決定に影響を与えるという理由だけで言及したいと思います処理を完了するためのDB。
したがって、単純な問題が残ります。テーブル内のデータが変更された場合、リモートサーバー上のc#コードで処理を実行したいと思います。
現在、「xp_cmdshell」を実行してWindowsサービスがリッスンしているイベントを発生させるexeを起動するSQLトリガーを使用することを考え出しました。これはただ気分が悪い。
しかし、私がオンラインで調べた他のソリューションもかなり複雑に感じます。たとえば、SQLCacheDependancyの設定には、ServiceBrokerの設定も含まれます。もう1つの可能な解決策は、Webサービスを呼び出すことができるCLRトリガーを使用することですが、これには、特にパフォーマンスが重要な場合に、それを実行するのに悪い方法であるという警告がオンラインで非常に多くあります。
理想的には、テーブルの変更に依存せず、アプリケーション内の呼び出しをインターセプトしてそこからサービスに通知します。残念ながら、一部のレガシーアプリケーションもデータに変更を加えており、テーブルの監視は瞬間。
どんな助けでも大歓迎です。
概要:
- テーブルデータの変更にリアルタイムで対応する必要があります
- パフォーマンスは重要です
- 大量のトラフィックが予想されます
- ポーリングとスケジュールされたタスクはオプションではありません(またはリアルタイム)
- サービスブローカーの実装が大きすぎます(ただし、解決策にすぎない可能性がありますか?)
- CLRコードはまだ除外されていませんが、提案された場合は実行する必要があります
- リスナー/モニターはリモートマシンである可能性があります(同じ物理ネットワークである可能性があります)
sql-server - SQL Server がアセンブリを SAFE として登録しないのはなぜですか?
SQL Server 2008 で、サポートされているライブラリのみを参照しているように見えるアセンブリを登録しようとしています。アセンブリを登録するために使用している T-SQL コードは次のとおりです。
これにより、次のエラーが発生します。
メッセージ 6509、レベル 16、状態 31、行 1 HRESULT 0x80004005 のアセンブリ '空間' からメタデータを収集中にエラーが発生しました。
ただし、 を追加するwith permission_set=unsafe
と、SQL はコマンドを正常に実行します。エラーが発生した理由、またはアセンブリを安全でないと登録する必要がある理由を確認するにはどうすればよいですか?
sql-server-2005 - Sql 2005 CLR 統合 - 動的アセンブリの読み込みはサポートされていますか?
.NET アセンブリを (メソッドを使用して) 動的にロードする静的クラスがありますAssembly.LoadFile
。次のエラー メッセージが表示されます。
.
この宣言を使用して CAS セキュリティを割り当てようとすると、
代わりにこの例外が発生します
注: SQL Server サービス アカウントに、ディスク上の動的アセンブリ ファイルへの「フル アクセス」を与えました。次の構文を使用して動的アセンブリをコピーしました。
回転TRUSTWORTHY ON
して設定した後PERMISSION_SET = UNSAFE
、この例外が発生します
sql - アセンブリの作成後に DLL が必要ですか?
でアセンブリを作成した後、DLL ファイル C:\PATH\TO\DLL\FILE.DLL を削除できますか
?
ファイルを削除した後、すべてが正常に機能しているようです。しかし
名前列にファイルのパスを表示します。これは問題を引き起こす可能性がありますか? (または、データベースに格納されている DLL の内容です)
asp.net - CLR が有効な SQL Server をサポートする ASP.NET ホスティング会社を見つけるにはどうすればよいですか?
そこで、ASP.NET と SQL Server 2008 で Web アプリケーションを開発しました。SQL コードの一部を .NET アセンブリとして (t-sql ではなく) 実装しました。
これで、アプリケーションをデプロイする準備が整いましたが、これを可能にするホスティング会社を探すのに苦労しています。ディスカウント ASP をスクラッチします (このフォーラムの投稿を参照してください)。他のホスティング会社にメールを送信しようとしましたが、返信がないか、サポートしないと言われています。
推奨事項はありますか?SQL Server で CLR を有効にすることの重要な点は何ですか?
sql-server - SQLユーザー定義型(UDT)でインデックスはどのように機能しますか?
これはしばらくの間私を悩ませてきました、そして私はSQLServerの専門家の1人がそれにいくらかの光を当てることができることを望んでいます。
質問は:
UDT(CLRタイプ)を含むSQL Server列にインデックスを付ける場合、SQL Serverは、特定のクエリに対して実行するインデックス操作をどのように決定しますか?
具体的にはhierarchyid
(AKA SqlHierarchyID
)タイプを考えています。マイクロソフトが推奨する方法、および私が使用する方法は次のとおりです。
列自体にインデックスを作成します
hierarchyid
(これを呼び出しましょうID
)。これにより、深さ優先探索が可能になり、を記述したときにWHERE ID.IsDescendantOf(@ParentID) = 1
インデックスシークを実行できるようになります。永続化された計算
Level
列を作成し、にインデックスを作成します(Level, ID)
。これにより、幅優先探索が可能になり、を記述したときにWHERE ID.GetAncestor(1) = @ParentID
、この式に対して(2番目のインデックスで)インデックスシークを実行できるようになります。
しかし、私が理解していないのは、これがどのように可能であるかということです。 これは通常のクエリプランのルールに違反しているようです。呼び出しは引数GetAncestor
にIsDescendantOf
できないように見えるため、完全なインデックススキャンが実行されるはずですが、そうではありません。明らかに不満を言っているわけではありませんが、この機能を自分のUDTで複製できるかどうかを理解しようとしています。
hierarchyid
SQL Serverが特別に認識し、クエリ要素とインデックスの特定の組み合わせが見つかった場合に実行プランを自動的に変更する、単なる「魔法の」タイプですか?または、CLR型は、SQL Serverエンジンによって理解されるSqlHierarchyID
特別な属性/メソッド(永続化された計算列の動作と同様)を単純に定義しますか?IsDeterministic
これに関する情報が見つからないようです。私が見つけたのは、IsByteOrdered
インスタンスごとに1つの一意の表現を保証することで、プロパティがインデックスやチェック制約などを可能にすることを示す段落だけです。これはやや興味深いものですが、SQLServerが特定のインスタンスメソッドを使用してシークを実行する方法については説明していません。
では、もう一度質問します。インデックス操作は、のようなタイプに対してどのように機能しますhierarchyid
か。また、新しいUDTで同じ動作を実現することは可能ですか。
c# - CLR プロシージャを使用する理由
CLR プロシージャを使用する理由。CLR プロシージャの重要性や、CLR プロシージャが唯一のソリューションである例はありますか?