SQL 2005 CLR は、デフォルトで .Net 2.0 フレームワークのみをサポートします。以前に.Net 3.5フレームワークをSQLサーバーにインポートしましたが、やや面倒で、いくつかのセキュリティホールが開いています(すべての詳細を思い出さないでください)が、この質問には迅速で汚いものがあります-特に
CREATE ASSEMBLY [System.Core]
AUTHORIZATION [dbo]
FROM
'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'
WITH PERMISSION_SET = UNSAFE
CLR プロシージャでよく遭遇するもう 1 つの障害は、ストアド プロシージャを実行しているユーザーからのセキュリティ コンテキストが CLR プロシージャに継承されないことです。
CLR proc のデバッグはそれほど簡単ではありません。あなたはそれを行うことができますが、完全なスタック バックトレース (行番号など) を取得することはできませんでした。したがって、可能な限り CLR に移行する前にデバッグしてください。
それ以外は、CLR プロシージャで大きな問題はありませんでした。SQL 内で複雑なコードを実行することによって発生する可能性のあるパフォーマンスの問題を処理できる限り、CLR プロシージャはかなりうまく機能します。CLR プロシージャ内で大量のメモリを割り当てないでください。あなたはそれを後悔するでしょう。
追加した
私が考えたもう一つの問題。CLR proc コードの記述には、一般的なクライアント側のコードやストアド プロシージャよりも高いレベルの習熟度が必要です。これはメンテナンス上の考慮事項です。
CLR プロシージャの更新も、クライアント側のコードまたは SQL プロシージャよりも複雑になるため、これも問題になる可能性があります。これもメンテナンスを複雑にします。
CLR proc を思いとどまらせようとしているわけではありません。パフォーマンス、柔軟性、セキュリティ (更新するには DB 権限が必要です) などのメリットもあります。しかし、「CLR proc がどれほど優れていて単純であるか」について読んだときに、彼らが教えてくれない問題を文書化しようとしていました。
追加した
詳細は説明しませんが、データ バインド (行数が多い) であり、ロジックをセット ベースとして記述できる場合、TSQL のパフォーマンスはセット ベースよりもはるかに優れていることがほぼ確実です。TSQL を介して多くの計算を実行しようとすると、TSQL は遅くなります。スクリプトの実行は遅くなり、データベース I/O の実行は速くなります。TSQL はプログラミング言語としてはあまり柔軟ではないため、CLR は柔軟性と高速なコード実行を追加します。
select ステートメント (Sql 2005 以降) での APPLY の使用に慣れていない場合は、複雑なクエリを「セットベース」に保つのに非常に役立つ可能性があるため、時間をかけて理解する必要があります。回避できる場合はカーソル -- 遅くなり、データベース リソースを消費します。