0

私は単純なSQLスクリプトを持っています:

Select * from student where score > 60

私がやろうとしているのは、この上記のスクリプトを 1 時間ごとに実行し、上記の条件が満たされた可能性がある方法でコンピューターに通知を受け取ることです。したがって、基本的には、上記のステートメントで 1 時間ごとに F5 キーを押して、結果が得られるかどうかを確認したくありません。ここの誰かがこれにぴったりのものを持っていることを願っています。もしそうなら、コードを共有してください。

4

1 に答える 1

1

Sql エージェントを使用してジョブを作成できます。Sql サーバー 2008 にはメール機能もあります。

SQL Management Studio を開き、SQL Server に接続します

SQL Server エージェント ノードを展開します (表示されない場合は、SQL 構成マネージャーを使用するか、サービスをチェックして、SQL Server Agent (SQLINSTANCENAME)開始されていることを確認します) 。

ジョブを右クリックし、「新しいジョブ」を選択します

ジョブで SQL ステートメントを実行できます。その部分の残りの部分を理解させます (かなり直感的です)。

を使用してメールを送信することができますxp_sendmail

については、SQL のドキュメントを参照してください。xp_sendmail

http://msdn.microsoft.com/en-us/library/ms189505(v=sql.105).aspx

この機能をオンにする必要があるかもしれません (デフォルトではオフになっています)。また、メールを配信するためのサーバー/マシンが必要です (したがって、ローカル マシンの場合は IIS と SMTP をインストールする必要があるかもしれません)。

編集:

サーバーにアクセスできず、クライアント側でこれを行いたい場合は、.NET Framework アプリまたは Windows サービスを作成して、スケジュールまたはタイマー アプローチを使用して作業を行うことができます。

スケジュールアプローチ:

クエリを実行して結果をメールで送信する単純なコマンド ライン アプリケーションを作成し、Windows スケジューラを使用して 1 時間ごと (または任意の間隔) に呼び出します。

タイマー アプローチ:

x分ごとに作業を行うタイマースレッドを実行する単純なアプリケーションまたはWindowsサービスを作成します

私はおそらく前者を選ぶでしょう。コードは非常に単純です - 新しいコンソール アプリ:

static void Main(string args[])
{
   // No arguments needed so just do the work
   using(SqlConnection conn = new SqlConnection("ConnectionString")) 
   {
       using(SqlCommand cmd = new SqlCommand("sql query text", conn))
       {
           var dr = cmd.ExecuteReader();
           List<myClass> results = new List<myClass>();

           // Read the rows
           while(dr.Read()) 
           {
               var someValue = dr.GetString(dr.GetOrdinal("ColumnName"));
               // etc
               // stuff these values into myClass and add to the list
               results.Add(new myClass(someValue));
           }
       }
   }

   if(results.Count > 0) // Send mail
   {
      //Send the message. 
      SmtpClient client = new SmtpClient(server);
      // Add credentials if the SMTP server requires them.
      client.Credentials = CredentialCache.DefaultNetworkCredentials;


      MailMessage message = new MailMessage(
           "recipient@test.com",
           "sender@test.com",
           "Subject",
           "Body");
     // Obviously you'd have to read the rows from your list, maybe override ToString() on 
     // myClass and call that using a StringBuilder to build the email body and append the rows


     // This may throw exceptions - maybe some error handling (in any of this code) is advisable
     client.Send(message);

    }
}

免責事項:おそらくこれはコンパイルされません:D

編集2:コマンドラインから実行できるので、Windowsサービスよりもデバッグがはるかに簡単なので、この方法を使用します。コマンドライン引数を渡すこともできるので、アプリケーション構成ファイルは必要ありません

于 2012-12-04T17:14:23.940 に答える