我在SQL Server中的触发器,但我需要参数传递给CLR代码,即在不触发中提供的信息。
是这样甚至可能吗?
CREATE TRIGGER MyTrigger ON MyTable FOR INSERT
AS EXTERNAL NAME MyAssembly.MyNamespace.MyTriggerHandler("Foo", "Bar")
这些参数是静态的,当然。
参数排列的数量是离散的,但对于每个创建在CLR组件的一个分离类或函数将是笨重,并且将需要的编译/部署步骤我想避免每次需要另一个触发时间。
一个小小的研究后,似乎是我想要做什么,不能做。
方法采用触发“外部名称”条款必须是无参数过去了,SqlTriggerContext不能在CREATE TRIGGER语句进行修改。
我结束了去置换路线,只是具有支持的参数较少发生。 也许.NET集成将是一个小更强大的未来四周时间。
在某种意义上,你可以将信息传递给一个触发(无论是T-SQL或SQLCLR),只是不能直接作为你显示的问题。 不过,你有路过这不是DML操作本身对任何触发事件链中的一部分信息,2个或3个选项:
- 本地临时表
- SET CONTEXT_INFO / CONTEXT_INFO
- 在SQL服务器2016或更高版本: sp_set_session_context / SESSION_CONTEXT
在任何情况下,你会通过执行获取值SqlCommand
(使用"Context Connection = true;"
与输出作为连接字符串) SqlParameter
的值拉入.NET代码。
是的,你可以使用这个程序SP_OA: http://msdn.microsoft.com/en-us/library/aa238863(SQL.80).aspx