1

我在 SQL Server 中有一个触发器,但我需要将参数传递给 CLR 代码,即触发器上下文中未提供的信息。

这样的事情甚至可能吗?

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

当然,这些论点是静态的。

参数排列的数量是离散的,但是在 CLR 程序集中为每个创建一个单独的类或函数会很笨拙,并且每次需要另一个触发器时都需要一个我想避免的编译/部署步骤。

4

3 回答 3

1

经过一番研究,看来我想做的事,做不到。

使用触发器“外部名称”子句传递的方法必须是无参数的,并且不能在 CREATE TRIGGER 语句中修改 SqlTriggerContext。

我最终选择了排列路线,并且支持的参数变体更少。也许 .NET 集成下次会更加强大。

于 2009-07-16T14:18:43.970 回答
1

从某种意义上说,您可以将信息传递给触发器(无论是 T-SQL 还是 SQLCLR),而不是像您在问题中显示的那样直接传递信息。尽管如此,您仍然有 2 或 3 个选项可以将不属于 DML 操作本身的信息传递给事件链中的任何触发器:

  1. 本地临时表
  2. 设置上下文信息/上下文信息
  3. 在 SQL Server 2016 或更高版本上:sp_set_session_context / SESSION_CONTEXT

在所有情况下,您都可以通过执行带有输出的SqlCommand"Context Connection = true;"用作连接字符串)SqlParameter将值拉入 .NET 代码来获取值。

于 2017-01-03T16:27:43.887 回答
0

是的,您可以为此使用 sp_OA 程序:http: //msdn.microsoft.com/en-us/library/aa238863 (SQL.80).aspx

于 2009-07-14T22:39:10.743 回答