从SQL Server导出数据更新
当需要更新特定列时,我需要从SQL Server导出数据,并想知道是否有一些建议的方法来执行此操作?从SQL Server导出数据更新
我有一个表'已激活',当这个值改为true时,应该触发一个导出。
我喜欢我需要一个触发器,对'激活'中的变化作出反应。我目前的两个选择是直接从触发器调用webservice,或者让触发器将数据插入到我的一个服务读取的表中并调用extern服务。 这些想法是否可取,还是有其他更好的解决方案?
您应该签出SQL Server Service Broker - 它可用于触发对数据更改的外部操作。
一个实现(我没有使用过)可以在这里找到:http://lab.arc90.com/2009/02/05/sqlwatcher-ad-hoc-database-change-monitoring/
Service Broker是我所需要的,SQLWatcher对于监控数据库似乎不错,但这次不符合我的需求 – user613068 2012-07-13 12:46:39
如果你在数据稀少的变化(例如归类值),则可以使用Query Notifications + SQLDependencies类。表现其场景也使用Service Broker @paul提到。
例如,你可以有表:
CREATE TABLE dbo.MyTable
(
MyTableID INT not null PRIMARY KEY IDENTITY,
SomeText nvarchar(50)
)
和SQL代码(用户权限进行了讨论here):
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();
}
}
}
你不应该做任何事情* *在一个触发器,它取决于数据库外部的任何资源。你大概*不会*希望更新必须等待5分钟,否则,如果与Web服务交谈时出现问题,更新将失败? – 2012-07-12 06:39:30