1

SQL Server にトリガーがありますが、引数を CLR コードに渡す必要があります。つまり、トリガー コンテキストで提供されていない情報です。

このようなことは可能ですか?

CREATE TRIGGER MyTrigger ON MyTable FOR INSERT
AS EXTERNAL NAME MyAssembly.MyNamespace.MyTriggerHandler("Foo", "Bar")

もちろん、これらの引数は静的です。

引数の順列の数は離散的ですが、CLR アセンブリで個別のクラスまたは関数を作成するのは扱いにくく、別のトリガーが必要になるたびに回避したいコンパイル/デプロイ手順が必要になります。

4

3 に答える 3

1

ある意味では、質問で示しているように、直接ではなく、情報をトリガー (T-SQL または SQLCLR) に渡すことができます。それでも、DML 操作自体の一部ではない情報をイベント チェーン内の任意のトリガーに渡すための 2 つまたは 3 つのオプションがあります。

  1. ローカル一時テーブル
  2. SET CONTEXT_INFO / CONTEXT_INFO
  3. SQL Server 2016 以降: sp_set_session_context / SESSION_CONTEXT

いずれの場合も、 (接続文字列としてSqlCommand使用) を出力で実行して値を取得し、値を .NET コードにプルします。"Context Connection = true;"SqlParameter

于 2017-01-03T16:27:43.887 に答える
1

少し調べてみると、やりたいことはできないようです。

トリガーの "external name" 句を使用して渡されるメソッドはパラメーターなしである必要があり、CREATE TRIGGER ステートメントで SqlTriggerContext を変更することはできません。

私は順列ルートに行き、サポートされている引数のバリエーションが少なくなりました。おそらく、次回は .NET 統合がもう少し堅牢になるでしょう。

于 2009-07-16T14:18:43.970 に答える