2012-07-11 5 views
0

특정 열이 업데이트되면 SQL Server에서 데이터를 내보내고이를 수행하는 데 권장되는 방법이 있는지 궁금하십니까?업데이트시 SQL Server에서 데이터 내보내기

'활성화 됨'열이있는 테이블이 있는데,이 값을 true로 변경하면 내보내기가 처리됩니다.

나는 'Activated'의 변화에 ​​반응하는 방아쇠가 필요합니다. 그리고 현재 두 가지 옵션은 트리거에서 웹 서비스를 직접 호출하거나 트리거가 내 서비스에서 읽고 extern 서비스를 호출하는 테이블에 데이터를 삽입하도록하는 것입니다. 이 아이디어 중 어느 것이 좋습니까? 아니면 더 좋은 해결책이 있습니까?

+0

당신은 트리거 * 아무것도 *를하지 말아야하는 사항에 따라 다릅니다 데이터베이스 외부의 모든 자원. 웹 서비스에 문제가있는 경우 업데이트가 5 분 동안 기다려야하거나 실패 할 것으로 예상 할 수 있습니까? –

답변

2

SQL Server Service Broker를 확인해야합니다. 데이터 변경시 외부 작업을 트리거하는 데 사용할 수 있습니다.

여기에서 찾을 수 있습니다 하나의 구현 (내가 사용하지 않은하는) : (예에 대한 분류 값) 데이터 자주 변경이있는 경우 http://lab.arc90.com/2009/02/05/sqlwatcher-ad-hoc-database-change-monitoring/

+0

Service Broker는 필자가 필요로하는 것이 었습니다. SQLWatcher는 데이터베이스 모니터링에 적합하지만 이번에는 내 필요에 맞지 않습니다. – user613068

0

, 당신은 Query Notifications + SQLDependencies 클래스를 사용할 수 있습니다. Behaind 현장에서도 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(); 
     } 
    } 
} 
관련 문제