【发布时间】:2017-04-14 12:37:48
【问题描述】:
我在 sql server 数据库中有一个触发器,行为非常奇怪,这些是奇怪的指令:
...
EXEC [ope].[spMissionDepartment] @AircraftId = @vnAircraftId
RAISERROR('test error', 16, 1)
END TRY
BEGIN CATCH
SELECT @ErrorMessage = ERROR_MESSAGE()
ROLLBACK TRANSACTION
RAISERROR(@ErrorMessage, 16, 1) -- strange line
END CATCH
奇怪的行为是这样的:
如果我删除 strange line 而不是在网页中收到错误
超时。在操作完成或服务器没有响应之前已经过去了超时时间。
否则,如果我不删除奇怪的行,我会收到错误
测试错误
没有其他触发器,所以 exec 应该是最后执行的语句,我怎么可能只收到一个 Timeout 而没有 Raiserror?
【问题讨论】:
-
在奇怪的行试试这个`RAISERROR(@ErrorMessage, 9, 1)`
-
但是如果我使用 9 作为严重性它将继续,所以就像没有 Raiserror,奇怪的行为是 Raiserror 应该是最后一条执行的语句,为什么后面会有超时?
-
也许这可以帮助你sqlhints.com/2013/06/30/…
-
我读了这篇文章,但是我有一个try catch,所以执行不会继续,这是正确的,奇怪的是我只收到一个超时而没有Raiserror i> 但它之后什么都没有。那么超时发生了什么?
-
如果添加一个带有另一个测试错误的 FINALLY 块会发生什么?
标签: sql-server database-trigger timeoutexception raiserror