如何从SQL TRIGGER执行.NET代码?

时间:2010-08-18 12:27:35

标签: .net sql-server sql-server-2005 .net-3.5 triggers

我们正在开发一个维护数据库的网站。这个网站正在取代传统的ASP页面和FoxPro应用程序以及用ASP.NET 3.5编写的新开发(主要是VB,一点C#和一些AJAX)。但是,还有其他系统可以更新我们的数据库。

由于这些系统可以执行更新数据中的状态,因此我们在数据库中有一些触发器(SQL Server 2005)。通常它是在SQL中处理的简单事情,但现在我们还有其他东西。

我们的用户将上传和存储一个文件(Excel电子表格),该文件将具有数据库的更新,只有在外部系统提前(即触发时)时才应处理该文件。该文件将存储为任何其他“附件”(我们的数据库具有指向特定目录中文件的指针),因为它需要预先验证(在实际处理之前很久)。

我们想要做的是在SQL触发器触发时执行“验证”文件的相同方法(除非这次它将实际处理更新)。

是否有相对简单的方法?

4 个答案:

答案 0 :(得分:3)

在您必须使用CLR Stored Procdure ...

之前已经完成了

请点击此处查看示例http://www.codeproject.com/KB/database/Managed_Code_in_SQL.aspx

Microsoft在codeplex上的SQL Server Database Engine Samples也有一些CLR示例。

祝DBA签字好运。

另一个选择是使用xp_cmdshell并在基本系统上执行“命令”,然后可以调用您的.net代码。再一次......祝DBAS好运;)

除了这两个,我想不出任何其他“简单”的方法。有很多复杂的方法可以做到这一点..

答案 1 :(得分:1)

在SQL Server上没有enabling CLR,就无法在其上运行SQL CLR存储过程和触发器。

同时SQL CLR trigger是您的任务的最佳解决方案

答案 2 :(得分:0)

我在数据库的程序集中进行了一些模糊搜索。这很棘手。首先,根据SQL Server版本,您不能使用.NET 2.0扩展(V3.0,V3.5,V4.0)。其次,您必须确保只使用托管代码。没有COM-Interops等。

我会想到一个更好的解决方案,因为触发器应该非常快,处理excel可能会非常慢。在该表上轮询的外部流程怎么样?

答案 3 :(得分:0)

我会让触发器将一个条目放入队列进行处理,并主动监视队列以查找需要执行的操作。这可以像表一样简单,也可以像Web服务调用一样复杂。但它应该很快。

通常,您不希望触发器操作很长或涉及更高级别的业务逻辑。触发器应该用于将数据库维护在一个状态,以便数据库可以为所有数据库用户提供一致的服务(因此触发器中的低级业务逻辑仍然可以)。一旦你进入应用程序级业务逻辑,你真的不希望它紧密耦合到你的数据库中。