2012-07-11 67 views
0

当需要更新特定列时,我需要从SQL Server导出数据,并想知道是否有一些建议的方法来执行此操作?从SQL Server导出数据更新

我有一个表'已激活',当这个值改为true时,应该触发一个导出。

我喜欢我需要一个触发器,对'激活'中的变化作出反应。我目前的两个选择是直接从触发器调用webservice,或者让触发器将数据插入到我的一个服务读取的表中并调用extern服务。 这些想法是否可取,还是有其他更好的解决方案?

+0

你不应该做任何事情* *在一个触发器,它取决于数据库外部的任何资源。你大概*不会*希望更新必须等待5分钟,否则,如果与Web服务交谈时出现问题,更新将失败? – 2012-07-12 06:39:30

回答

0

如果你在数据稀少的变化(例如归类值),则可以使用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(); 
     } 
    } 
} 
相关问题