我在SQL Server中有一个触发器,但我需要将参数传递给CLR代码,即触发器上下文中未提供的信息。
这样的事情是否可能?
CREATE TRIGGER MyTrigger ON MyTable FOR INSERT
AS EXTERNAL NAME MyAssembly.MyNamespace.MyTriggerHandler("Foo", "Bar")
当然,这些论点是静态的。
参数排列的数量是离散的,但是在每个CLR程序集中为每个创建一个单独的类或函数会很笨重,并且需要一个编译/部署步骤,我希望每次需要另一个触发器时避免它。
答案 0 :(得分:1)
经过一番研究,看来我想做什么,做不到。
使用触发器“external name”子句传递的方法必须是无参数的,并且不能在CREATE TRIGGER语句中修改SqlTriggerContext。
我最终选择了排列路径并且支持的参数变化较少。也许下一次.NET集成会更加强大。
答案 1 :(得分:1)
从某种意义上说,您可以将信息传递给触发器(无论是T-SQL还是SQLCLR),而不是直接在问题中显示。尽管如此,您还有2或3个选项可以将不属于DML操作本身的信息传递给事件链中的任何触发器:
在所有情况下,您都可以通过执行SqlCommand
(使用"Context Connection = true;"
作为连接字符串)和输出SqlParameter
来获取值,以将值拉入.NET代码中。
答案 2 :(得分:0)
是的,你可以使用sp_OA程序:http://msdn.microsoft.com/en-us/library/aa238863(SQL.80).aspx