我们正在开发一个维护数据库的网站。这个网站正在取代传统的ASP页面和FoxPro应用程序以及用ASP.NET 3.5编写的新开发(主要是VB,一点C#和一些AJAX)。但是,还有其他系统可以更新我们的数据库。
由于这些系统可以执行更新数据中的状态,因此我们在数据库中有一些触发器(SQL Server 2005)。通常它是在SQL中处理的简单事情,但现在我们还有其他东西。
我们的用户将上传和存储一个文件(Excel电子表格),该文件将具有数据库的更新,只有在外部系统提前(即触发时)时才应处理该文件。该文件将存储为任何其他“附件”(我们的数据库具有指向特定目录中文件的指针),因为它需要预先验证(在实际处理之前很久)。
我们想要做的是在SQL触发器触发时执行“验证”文件的相同方法(除非这次它将实际处理更新)。
是否有相对简单的方法?
答案 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服务调用一样复杂。但它应该很快。
通常,您不希望触发器操作很长或涉及更高级别的业务逻辑。触发器应该用于将数据库维护在一个状态,以便数据库可以为所有数据库用户提供一致的服务(因此触发器中的低级业务逻辑仍然可以)。一旦你进入应用程序级业务逻辑,你真的不希望它紧密耦合到你的数据库中。