2009-07-14 53 views
1

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

这样的事情甚至可能吗?

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

这些参数当然是静态的。

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

回答

1

了一些研究之后,它似乎是我想要做什么,不能做。

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

我结束了去置换路线,只是具有支持的参数较少发生。也许.NET整合将在下一次更加强大。

+0

您无法将参数传递给正常触发器。为什么要在SQLCLR触发器上使用参数? INSERTED,DELETED表可用于在SQLCLR触发器内查询,就像它们在正常触发器内一样 – 2017-01-03 16:20:36

1

在某种意义上可以将信息传递给一个触发(是否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;"作为连接字符串)与输出获取值将值拉入.NET代码。

相关问题