我可以传递参数给外部(CLR)SQL Server的触发器?(Can I pass argument

2019-09-18 21:44发布

我在SQL Server中的触发器,但我需要参数传递给CLR代码,即在不触发中提供的信息。

是这样甚至可能吗?

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

这些参数是静态的,当然。

参数排列的数量是离散的,但对于每个创建在CLR组件的一个分离类或函数将是笨重,并且将需要的编译/部署步骤我想避免每次需要另一个触发时间。

Answer 1:

一个小小的研究后,似乎是我想要做什么,不能做。

方法采用触发“外部名称”条款必须是无参数过去了,SqlTriggerContext不能在CREATE TRIGGER语句进行修改。

我结束了去置换路线,只是具有支持的参数较少发生。 也许.NET集成将是一个小更强大的未来四周时间。



Answer 2:

在某种意义上,你可以将信息传递给一个触发(无论是T-SQL或SQLCLR),只是不能直接作为你显示的问题。 不过,你有路过这不是DML操作本身对任何触发事件链中的一部分信息,2个或3个选项:

  1. 本地临时表
  2. SET CONTEXT_INFO / CONTEXT_INFO
  3. 在SQL服务器2016或更高版本: sp_set_session_context / SESSION_CONTEXT

在任何情况下,你会通过执行获取值SqlCommand (使用"Context Connection = true;"与输出作为连接字符串) SqlParameter的值拉入.NET代码。



Answer 3:

是的,你可以使用这个程序SP_OA: http://msdn.microsoft.com/en-us/library/aa238863(SQL.80).aspx



文章来源: Can I pass arguments to an external (CLR) SQL Server trigger?