0

特定の列が更新されたときにSQLServerからデータをエクスポートする必要がありますが、これを行うための推奨される方法があるかどうか疑問に思いますか?

'Activated'列のテーブルがあります。この値をtrueに変更すると、エクスポートがトリガーされます。

「アクティブ化」の変更に反応するトリガーが必要だと思います。現在の私の2つのオプションは、トリガーから直接Webサービスを呼び出すか、1つのサービスが読み取ってexternサービスを呼び出すテーブルにトリガーにデータを挿入させることです。このアイデアのいずれかが望ましいですか、それとも他のより良い解決策がありますか?

4

2 に答える 2

2

SQL Server ServiceBrokerを確認する必要があります。SQLServerServiceBrokerを使用して、データの変更に対して外部アクションをトリガーできます。

1つの実装(私は使用していません)はここにあります:http://lab.arc90.com/2009/02/05/sqlwatcher-ad-hoc-database-change-monitoring/

于 2012-07-11T11:03:46.350 に答える
0

データの変更が頻繁でない場合(たとえば、分類された値)、Query Notifications + SQLDependenciesクラスを使用できます。シーンの裏側では、前述のServiceBroker@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();
        }
    }
}
于 2012-07-12T06:33:41.027 に答える