私はこの小さなコードを修正するのに苦労しています。私は誰かが助けることを望んでいる。私は何かを欠いているに違いない。Sql whileループでキャッチしよう
これは私が達成しようとしているものです。アーカイブプロセス中に、我々は多くのテーブルから数千から数百万行を削除するプロセスに進みます。いくつかの削除プロセスは他のプロセスより時間がかかります。だから私がやろうとしているのは、実行中のエラーをキャッチし、電子メールで通知することです。また、削除が完了したら私に電子メールを送ろうとしています。
INTERVALコードは削除と大きく機能し、処理に必要です。私は電子メールを送信するためにTry..Catch Blockを正しく追加しようとしています。
これは、今日のテストでのパフォーマンスです。
[削除]の代わりに[選択1/0]を実行すると、エラーが発生します。 "FAILED"メールが届きます。しかし、私はまた、 "COMPLETED"電子メールを取得します。この場合、私は失敗したメールのみを探しています。また、電子メールと "print"行の@Totalcount変数は、この行からいっぱいになっていません - SET @TOTALCOUNT = @TOTALCOUNT + @CHECKCOUNT
以下のコードをエラーなしでDELETEとして実行すると、 "COMPLETED"メール。 @totalcount変数が電子メールと印刷行に入力されても問題はありますが。
完成したSET変数とCompleted電子メールコードをTRYブロックに移動しましたが、運がまったくありませんでした。私はネスティング・トライ・ブロックの非常に多くのバリエーションを試して、ブレークを動かしましたが、それを正しく理解することはできません。どんな助けや指導も大歓迎です。
おかげ
DECLARE
@INTERVAL INT
,@CHECKCOUNT INT
,@TOTALCOUNT INT
,@starttime DATETIME
,@endDELtime DATETIME
,@endtime DATETIME
SET @starttime = GETDATE()
SET @INTERVAL = 10
SET @TOTALCOUNT = 0
WHILE 1 = 1
BEGIN
BEGIN TRY
--SELECT 1/0;
DELETE TOP (@INTERVAL)
FROM dbo.specphone
WHERE SPEC IN
(
SELECT
SPEC
FROM dbo.tblGeneral (NOLOCK)
)
END TRY
BEGIN CATCH
DECLARE @err_msg AS NVARCHAR(MAX);
SET @endDELtime = GETDATE()
SET @err_msg = 'Severity - ' + CONVERT(VARCHAR(10), ERROR_SEVERITY()) +
CHAR(13) +
'Error Number - ' + CONVERT(VARCHAR(10), ERROR_NUMBER()) + CHAR(13) +
'Error Message - ' + ERROR_MESSAGE() + CHAR(13) +
'tblspecphone: ' + 'Total Count ' + CONVERT(VARCHAR, @TOTALCOUNT) +
CHAR(13) +
' Start Time is ' + CONVERT(VARCHAR(25), @starttime) + CHAR(13) +
' End Time is ' + CONVERT(VARCHAR(25), @endDELtime) ;
--SELECT ERROR_NUMBER() AS ErrorNumber;
--SELECT ERROR_MESSAGE() AS ErrorMessage;
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'default',
@recipients = '[email protected]',
@subject = 'FAILED - Archive Project Delete Script',
@body = @err_msg;
END CATCH
SET @CHECKCOUNT = @@RowCount
SET @TOTALCOUNT = @TOTALCOUNT + @CHECKCOUNT
IF @CHECKCOUNT = 0
SET @endtime = GETDATE()
DECLARE
@bodymsg AS VARCHAR(MAX)
SET @bodymsg = 'The Delete Query has finished. Verify and Proceed on
with next script if no Errors.' + CHAR(13) +
'tblspecphone: ' + 'Total Count ' + CONVERT(VARCHAR, @TOTALCOUNT) +
CHAR(13) +
' Start Time is ' + CONVERT(VARCHAR(25), @starttime) + CHAR(13)
+
' End Time is ' + CONVERT(VARCHAR(25), @endtime)
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'default',
@recipients = '[email protected]',
@body = @bodymsg,
@subject = 'Completed - Archive Project Delete Script';
END
BREAK
END
PRINT '
tblspecphone: ' + 'Total Count ' + CONVERT(VARCHAR, @TOTALCOUNT) +
' Start Time is ' + CONVERT(VARCHAR(25), @starttime) + ' End Time is '
+ CONVERT(VARCHAR(25), @endtime)
タグDBMSを。そのコードは製品固有です。 – jarlh