SQLCLRトリガーがあります。それはのような部品で、内部の大規模かつ厄介なSELECTが含まれていますSELECTをSQL Server側に移動
(CASE WHEN EXISTS(SELECT * FROM INSERTED I WHERE I.ID = R.ID)
THEN '1' ELSE '0' END) AS IsUpdated -- Is selected row just added?
だけでなく、私がすべて含まれた単一のテーブルとして結果を持ちたいなどに参加します。
質問1。このSELECTをSQL Server側に移動できますか?はいの場合、これを行う方法は?
「移動」とは、サイクル中にデータセットを読み込む前に実行できるストアドプロシージャなどを作成することです。
次の2つの質問は、回答が「はい」の場合にのみ意味があります。
なぜSELECTを移動したいですか?まず、SQLとC#コードを混在させるのは嫌いです。第二に、サーバー側でクエリをキャッシュするチャンスが増えているため、サーバー側のクエリがより高速に実行されると思います。
質問2。私は正しい?それはある種の最適化ですか?
また、SELECTには定数文字列が含まれていますが、それらはローカライズ可能です。 OnCreateイベントおよびOnDestroy - - その後、ストアドプロシージャとしてマークたとえば、だから、ドイツ語、フランス語などのために変更する必要があります「有効」
WHERE R.Status = "Enabled"
は、私は2つの静的メソッドを書きたいです。サーバーサイドでアセンブリを登録/登録解除するときは、それぞれ呼び出すだけです。 OnCreateでは、{0}、{1} ...をアセンブリリソースからの必要な値に置き換えて、SELECT文字列をフォーマットします。その後、すべてのスクリプトではなく、リソースのみをローカライズできます。
質問3。いいアイデアですか?アセンブリを登録した後に自動的にSQL Serverによって実行されるメソッドをマークする既存の属性はありますか?
よろしく、
残念ながら、それは複数のCOMサーバーを使用するため、純粋なT-SQLでの変換はオプションではありません。 – noober
@noober:sp_OACreateを使用して、T-SQL内からCOMのものをインスタンス化して使用することができます。 –
sp_OACreateの使用には注意が必要です。 sp_OA関数を使用することから「メモリ不足」を除いた問題がありました。これはSQL Server 2005のSP3で修正されたと思われますが、修正されていないため、削除する必要がありました。 sp_OA *の参照が削除されて以来、何の問題もありませんでした。 –