【发布时间】:2018-04-18 08:11:57
【问题描述】:
我有以下存储过程语句:
DECLARE @CurrentId BIGINT
DECLARE @FailedRecord NVARCHAR(MAX) = ''
BEGIN TRY -- 1st Try
INSERT INTO #tmpNewApp
SELECT Id, Email, Content
FROM dbo.NewApplication
WHILE EXISTS(SELECT * FROM #tmpNewApp)
BEGIN
BEGIN TRY -- 2nd Try
SET @CurrentId = (SELECT TOP 1 Id FROM #tmpNewApp)
INSERT INTO EmailSending
SELECT Email, Content
FROM #tmpNewApp
WHERE Id = @CurrentId
END TRY
BEGIN CATCH -- 2nd Catch
SET @FailedRecord = @FailedRecord + ', ' + @CurrentId;
END CATCH
DELETE FROM #tmpNewApp
WHERE Id = @CurrentId
END
END TRY
BEGIN CATCH -- 1st Catch
INSERT INTO DatabaseException
SELECT ERROR_MESSAGE(), GETDATE()
END CATCH
SELECT @FailedRecord
我正在尝试获取在循环期间遇到异常的 ID 列表。但是,@FailedRecord 总是返回空,DatabaseException 总是能够捕获异常,这似乎是第二个 CATCH 被第一个 CATCH 捕获,而第二个 CATCH 中的语句被忽略了。
为什么会这样?
【问题讨论】:
标签: tsql stored-procedures sql-server-2014