私は次のことをしようとしています。ユーザーは aspx ページで発行日と期日を入力しています。これらの日付はyyyy/MM/dd、データベースに保存される形式です。
期日の3日前までにユーザーにメールを送信できるようにしたいです。
私が見つけることができた方法は、Windows Serviceまたはを使用していますSQL Jobが、問題は、概念をラップして機能させることができないことです。
紛らわしい部分は、Windows サービス用の新しいプロジェクトを作成する必要があることです。これが正しいかどうかはわかりませんが、私のアプローチは、SQL Server に接続し、課題と期日をデータベースにクエリしてから計算を実行することでした。に保存し、 が次のユーザーにメールを送信するか、ポーリングしない場合resultdateは、 に保存します。resultdateToday's date
編集:
Stored Procedureに設定される を作成することで、上記を達成しようとしていWindows Serviceます。現在、私は次のことに苦労しています。
をMS SQL DB含む があり、目標は の前にclosing date別の DB に電子メールがあるユーザーに電子メールを送信することです。2 daysclosing date
次のコードを参照してください。私は使用してCURSOR FORいますが、2 つのコマンド セットをSELECT異なる DB に使用する方法がわかりません。最初のコマンドSELECTはいくつかの変数に格納されており、これらの変数は他の DB から残高データを取得します。
USE ROG
DECLARE @Currentdate varchar(10), @DueDate varchar(10), @Serial_No int, @Product_Line varchar(50), @Email varchar(50)
SET @Currentdate = GETDATE()
DECLARE RFQDate CURSOR FOR
SELECT Serial_No, RFQ_Closing_Date, Product_Line FROM RFQDB WHERE DATEDIFF(day, GETDATE(), RFQ_Closing_Date) = 2
OPEN RFQDate
FETCH NEXT FROM RFQDate INTO @Serial_No, @DueDate, @Product_Line
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM RFQDate INTO @Serial_No, @DueDate, @Product_Line
PRINT ' Due Date ' + @DueDate + ' Serial No ' + coalesce(Convert(varchar(4), @Serial_No),'') + ' Product Line ' + @Product_Line
END
DECLARE EMAIL CURSOR FOR --Not sure if this way is correct (this is where I need help!!!
SELECT Sales_Email_ID FROM ProductLineDB WHERE Product_Line = @Product_Line
OPEN EMAIL
FETCH NEXT FROM EMAIL INTO @Email
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM EMAIL INTO @Email
PRINT ' EMAIL ' + @Email
END
CLOSE EMAIL
DEALLOCATE EMAIL
CLOSE RFQDate
DEALLOCATE RFQDate
ただし、上記のコードをテストすると、すべての期日が正しく表示されますが、期日に関連付けられたメールは 1 つしか表示されません。代わりに、5 つのメールが表示されます。
MS SQL メッセージ画面
Due Date 2013/02/14 Serial No 1015 Product Line Tubes
Due Date 2013/02/14 Serial No 1015 Product Line Instrumentation
Due Date 2013/02/14 Serial No 1015 Product Line Tooling
Due Date 2013/02/14 Serial No 1015 Product Line Tooling
Due Date 2013/02/14 Serial No 1015 Product Line Tooling
EMAIL xxx@abc.com
正しいコードを編集
次のコードは、必要なすべての情報を取得しています。あとは、スカラー値からsp_send_dbmailを取得するために を実装するだけです。@recipients@Email
The working code is as the following:
USE ROG
DECLARE @Currentdate varchar(10), @DueDate varchar(10), @Serial_No int, @Product_Line varchar(50), @Email varchar(50)
SET @Currentdate = GETDATE()
DECLARE RFQDate CURSOR FOR
SELECT Serial_No, RFQ_Closing_Date, Product_Line FROM RFQDB WHERE DATEDIFF(day, GETDATE(), RFQ_Closing_Date) = 2
OPEN RFQDate
FETCH NEXT FROM RFQDate INTO @Serial_No, @DueDate, @Product_Line
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE EMAIL CURSOR FOR
SELECT Sales_Email_ID FROM ProductLineDB WHERE Product_Line = @Product_Line
OPEN EMAIL
FETCH NEXT FROM EMAIL INTO @Email
PRINT ' EMAIL: ' + @Email
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM EMAIL INTO @Email
END
CLOSE EMAIL
DEALLOCATE EMAIL
FETCH NEXT FROM RFQDate INTO @Serial_No, @DueDate, @Product_Line
PRINT ' Due Date: ' + @DueDate + ' Serial No: ' + coalesce(Convert(varchar(4), @Serial_No),'') + ' Product Line: ' + @Product_Line
END
CLOSE RFQDate
DEALLOCATE RFQDate