SQLServer CLR触发器

时间:2015-04-02 17:32:35

标签: .net visual-studio-2012 triggers sqlclr sql-server-2014

我不能为我的生活找到任何与我所处的场景有关的东西。而且作为序言,我对SQL CLR触发器一般都比较新。我所在的场景中有一个我在SQL Server中创建的CLR触发器程序集,其中.NET代码本身根据插入或更新的记录对单个数据库表执行一些业务逻辑。从本质上讲,.NET代码从表中提取数据来完成其工作,然后更新同一个表。

总之,只要SQL Server和带有.NET代码的应用程序驻留在同一台机器上,我就能正常工作。我已经为现实世界的客户设置了一个开发环境,其中一台SQL Server驻留在一台机器上,而应用程序在不同的机器上使用SQL Server,试图模仿分布式环境。但是,当SQL Server中的触发器“触发”时,应用程序在另一台计算机上如何使用该触发器?

这是我认为我知道的,或者更确切地说是问题,以便我验证我正确地思考它。

我们的客户使用分布式环境,其中一个或多个应用程序使用的SQL Server可以从远程计算机使用。 (已经知道触发器上的饥饿需要太长时间,而且我已经解决了这个问题)。是否需要将CLR触发器用于“特定”服务器或(对于SQL Server项目)可以通过动态确定该服务器吗?

SqlContext是否知道与SQL Server计算机的上下文关系?或者是在VS项目文件中确定并且是“特别”指示的?是否可以更改或者CREATE ASSEMBLY是否始终根据为其创建的编译保留定义的值?

我知道触发器是在SQL Server中创建的,并且在.NET代码中设置了相同的触发器引用([SqlTrigger(Name =“aTrigger”等等)。换句话说,如何远程应用程序知道SQL Server中设置的触发器已经触发了吗?如果应用程序本身调用SQL Server,SqlContext是否只知道触发器已被触发?如果是这样,当SQL Management Studio中发生插入/更新时会发生什么?

好的,问题就够了。我可以和他们一起玩,所以让我们先看看对任何人都有意义。我可能会对这些东西感到满意。感谢您给出的任何建议。

1 个答案:

答案 0 :(得分:0)

我能够在没有服务经纪人的情况下工作。因为我对CLR触发器如何工作的理解是相当有限的,所以我没有意识到我创建的SQL程序集是实际运行的程序集,由于日志记录我能够确定我正在考虑这个错误的方式。一旦我理解了这个概念,那些我期待在那里的东西(假设它是在我的.NET代码中运行而不是作为SQL程序集)不是,所以我只需要以不同的方式处理它。一旦我从运行程序集的SQL的上下文中找出了使事情保持一致的细节,一切都到位并且爆炸,它起作用了。考虑关闭此主题。再次感谢您的帮助,非常感谢。