0

データ範囲を照会するテーブル:

Id  Variance
1     2
2     17
3     7
4     4
5     20
6     1
7     111
8     8
9     18
10    67

持っている別のテーブル

 Freq    StartRange   EndRange
H   10         7
H   8          8
H   6          20   

最初のテーブルのデータは、SSIS パッケージを通じて 30 分ごとに読み込まれます。

ここで、Variance 列のデータが StartRange と EndRange に収まったときに、電子メールのようにアラートがトリガーされるようにします。

CREATE PROCEDURE [dbo].[SP_Email] @Start varchar(50),@End varchar(50),@Date datetime
AS
BEGIN
DECLARE @xml NVARCHAR(MAX)
DECLARE @body NVARCHAR(MAX)

SET @xml = CAST(( SELECT [SlNo] AS 'td','',[date] AS 'td','',
   [lag] AS 'td','', Percent AS 'td'
FROM  TestTbl 
WHERE(percent >= @Start AND percent < @End)
AND CAST(CONVERT(VARCHAR,curDate,106) AS DATETIME) = CAST(@Date AS DATETIME)
ORDER BY SlNo 
FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))

SET @body ='<html><body><H3>Report</H3>
<table border = 1> 
<tr>
<th> SlNo </th> <th> date </th> <th> lag </th> <th> Percent </th></tr>'    

SET @body = @body + @xml +'</table></body></html>'

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Alert', 
@body = @body,
@body_format ='HTML',
@recipients = 'abc@gmail.com'
@subject = 'Report';
END

SQL Server 2005 でのセットアップに役立つプロセスを提案してください。

前もって感謝します

4

2 に答える 2

1

これは、 SQL Server エージェント ジョブを介して実行できます。

EXEC dbo.sp_add_job
    @job_name = N'Variance Check',
    @notify_email_operator_name='you@your.domain',
    @notify_level_email=2; -- Only notify you when YourStoredProceedure fails
GO
EXEC sp_add_jobstep
    @job_name = N'Variance Check',
    @step_name = N'Check the variance',
    @subsystem = N'TSQL',
    @command = N'EXEC YourStoredProceedure', 
    @retry_attempts = 1,
    @retry_interval = 5 ;
GO
EXEC dbo.sp_add_schedule
    @schedule_name = N'EveryThirtyMinutes',
    @freq_type = 4, -- Daily
    @freq_subday_type = 0x4, -- Minutes
    @freq_subday_interval = 30, 
    @active_start_time = NULL; -- Start right away
USE msdb ;
GO
EXEC sp_attach_schedule
   @job_name = N'Variance Check',
   @schedule_name = N'EveryThirtyMinutes';
GO
EXEC dbo.sp_add_jobserver
    @job_name = N'Variance Check';
GO
于 2012-10-03T13:50:03.943 に答える
1

これにアプローチする 1 つの方法は、トリガーを使用することです。ただし、トリガーを介してメールを送信することはお勧めしません。

代わりに、T1 にデータをロードするプロセスにステップを追加します。この手順の後、条件を満たす行を検索し、適切な電子メールを送信するストアド プロシージャを呼び出します。

ただし、条件が何であるかを正確に伝えることはかなり困難です。2 番目のテーブルには 3 つの範囲があります。どの行にどれを適用するかは明確ではありません。

于 2012-10-03T13:50:28.820 に答える