当特定列更新时,我需要从 SQL Server 导出数据,想知道是否有一些推荐的方法来做到这一点?
我有一个包含“已激活”列的表,当此值更改为 true 时,应触发导出。
我想我需要一个对“激活”中的变化做出反应的触发器。而我目前的两个选择是直接从触发器调用webservice,或者让触发器在我的一个服务读取的表中插入数据并调用extern服务。这些想法中的任何一个更可取还是有其他更好的解决方案?
当特定列更新时,我需要从 SQL Server 导出数据,想知道是否有一些推荐的方法来做到这一点?
我有一个包含“已激活”列的表,当此值更改为 true 时,应触发导出。
我想我需要一个对“激活”中的变化做出反应的触发器。而我目前的两个选择是直接从触发器调用webservice,或者让触发器在我的一个服务读取的表中插入数据并调用extern服务。这些想法中的任何一个更可取还是有其他更好的解决方案?
您应该查看 SQL Server Service Broker - 它可用于触发对数据更改的外部操作。
可以在这里找到一种实现(我没有使用过):http: //lab.arc90.com/2009/02/05/sqlwatcher-ad-hoc-database-change-monitoring/
如果您的数据不经常更改(例如分类值),则可以使用Query Notifications + SQLDependencies类。在场景背后,它还使用提到的 Service Broker @paul。
例如,您可以有表:
CREATE TABLE dbo.MyTable
(
MyTableID INT not null PRIMARY KEY IDENTITY,
SomeText nvarchar(50)
)
和 SQL 代码(这里讨论用户权限):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
SqlDependency.Start("server=<MyServer>;database=<MyDB>;User ID=<user>;Password=<pwd>;Integrated Security=false;");
Console.WriteLine("Started..");
get_msg();
Console.ReadLine();
SqlDependency.Stop("server=<MyServer>;database=<MyDB>;User ID=<user>;Password=<pwd>;Integrated Security=false;");
}
private static void get_msg()
{
using (SqlConnection con =
new SqlConnection("server=<MyServer>;database=<MyDB>;User ID=<user>;Password=<pwd>;Integrated Security=false;"))
{
SqlCommand com = new SqlCommand("SELECT MyTableID, SomeText FROM dbo.MyTable ", con);
SqlDependency dependency = new SqlDependency(com);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
con.Open();
com.ExecuteNonQuery();
}
}
static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
Console.WriteLine("dependency Info = {0}, time: {1}",e.Info, DateTime.Now);
get_msg();
}
}
}