- - PR -
SQLServerのジョブについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-19 17:12
お世話になります。
かなり初歩的な質問なのですが・・・。 SQLServer2000のSQLServerエージェントのジョブで 決まった時間に、Aという名前のテーブルのBという列が「1」になっている データを「0」に更新した上で、更新したデータのCという列の値を メールで知らせるようにしたいのですが、できますでしょうか? | ||||
|
投稿日時: 2005-08-19 18:04
お疲れ様です。 端的に回答いたしますと, 可能です。 「1」→「0」のアップデートは,T-SQL スクリプトジョブステップで実現, メール送信は「xp_SendMail」が利用できるように SQL Server を構成することで可能です。 更新し終わった段階で,更新された行の「C」を読み取る,と考えてしまうと, ジョブステップを組むときに悩んでしまうかもしれないですが, ・ActiveX スクリプトタスクで VB ライクにコードを書く ・ジョブステップの実行順を工夫して対応する などすれば,実現できると思います。 がんばってください。 ---------- TimberLandChapel http://blogs.timberlandchapel.com/blogs/timberlandchapel/ | ||||
|
投稿日時: 2005-08-19 19:32
TLC様、ご返答ありがとうございます。
>ActiveX スクリプトタスクで VB ライクにコードを書く ・・・というところまではわかっていたのですが、 ジョブステップを考えたとき・・・ 1、Select文で更新対象のデータを抽出 2、抽出したデータをメール送信 3、Update文で更新 といった流れを考えました。 1と3についてはSQLを実行するだけなので問題ありませんが 2がどう実現すればよいかわかりません。 1で抽出されたデータをどのようにして、2に受け渡すのか、というところです。 メール送信そのものはできます。 | ||||
|
投稿日時: 2005-08-20 19:40
お疲れ様です。 xp_SendMail には @query というパラメータがあります。 詳細は BooksOnline の 「xp_SendMail」 を参照ください。 UPDATE の際の更新異常エラーなどを検知するシナリオも追加すると,より複雑になってしまいますが, エラーが発生した場合は追加でメールを送信する。 などと簡単に考えてしまえば実現が容易になるのではないでしょうか? この辺は,要件との相談になりますね。 実際には T-SQL スクリプトステップを細かく分割するより, 一括で作業を行うストアドをキックするなどとしたほうが メンテナンスがしやすいのではないかと僕は考える派です。 ---------- TimberLandChapel http://blogs.timberlandchapel.com/blogs/timberlandchapel/ [ メッセージ編集済み 編集者: TLC 編集日時 2005-08-20 19:48 ] | ||||
|
投稿日時: 2005-08-22 17:27
TLC様
xp_SendMail についての情報ありがとうございました。 調べたところ、xp_SendMail はメーラがOutlookでないといけないみたいですよね? http://www.sqlpassj.org/bunkakai/begin/report/040129.aspx そのため、OutlookExpressでも送信可能な「xp_smtp_sendmail」というのを http://www.sqldev.net/xp/xpsmtp.htm から入れて、テストしてみたところメール送信自体はできましたが @queryと同じ働きをする引数が今のところないとのことでした・・・。 そこでストップしてしまっています。 | ||||
|
投稿日時: 2005-08-22 18:22
お疲れ様です。 xp_sendmail は,参照先の堀川さんの記事でも語られていますが,MAPI を利用します。 端的に言うと,Outlook が入っていないと使えない。ということになります。 一方,sqldev さんのところで提供されている xp_smtp_sendmail は 純粋に smtp だけを使って細かな設定をしたメールを送信すること を提供しています。 しかし, ここでよく考えてください。 メールの内容に記述されて送信されてくる結果セットの情報も, 「メールの機能としてはたんなるテキストデータを送っているだけ」 ということです。 小さな結果セットでしたら,メール送信するストアドのローカル変数に 結果セットをテキストに加工したものをストアして, @message に引き渡せばできます。 これを行うにはカーソル操作が見た目も加工できていいですかね。 カーソルの簡単な使い方は自分のブログでも書いています。 ↓ http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2005/07/15/79.aspx 一方,巨大な結果セットであれば, 1.一端 osql ユーティリティの「-o」オプションを使用して中間ファイルに出力して, 2.それを xp_smtp_sendmail の @attachment に指定することで実現できますね。 いくつかのツールを組み合わせることによっていろいろなことが可能です。 いろいろと試してみるところからはじめてみてください。 ---------- TimberLandChapel http://blogs.timberlandchapel.com/blogs/timberlandchapel/ |
1