当我通过SQL Server Mgmt Studio执行一批插入查询时,会产生以下错误,但会完成其他查询的插入过程。
Msg 18054,Level 16,State 1,Procedure X,Line 14
错误50001,严重性-1,状态1被引发,但在sys.messages中找不到具有该错误号的消息。如果错误大于50000,请确保使用sp_addmessage添加用户定义的消息。Msg 18054,Level 16,State 1,Procedure Y,Line 14
错误50001,严重性-1,状态1被引发,但在sys.messages中找不到具有该错误号的消息。如果错误大于50000,请确保使用sp_addmessage添加用户定义的消息。Msg 18054,Level 16,State 1,Procedure Z,Line 14
错误50001,严重性-1,状态1被引发,但在sys.messages中找不到具有该错误号的消息。如果错误大于50000,请确保使用sp_addmessage添加用户定义的消息。
但是,在终端插入查询中通过ant作业执行时,进程将停止并显示以下错误消息。
BUILD FAILED
C:\test\mssql\build.xml:27: The following error occurred while executing this line:
C:\test\mssql\build-core.xml:74: com.microsoft.sqlserver.jdbc.SQLServerException: Error 50001,
severity -1, state 1 was raised, but no message with that error number was found in sys.messages. If error is larger than 50000,
make sure the user-defined message is added using sp_addmessage.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
我试图忽略它来处理错误:
set ANSI_WARNINGS OFF;
通过为抛出错误的过程定义try-catch块:
BEGIN TRY
RAISERROR (50001,-1,1, 'X');
RAISERROR (50001,-1,1, 'Y');
RAISERROR (50001,-1,1, 'Z');
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;
但是在构建失败的终端中错误仍然存在。
如果我定义自定义错误消息如下:
EXEC sp_addmessage 50001, 16, N'Test Message';
GO
我刚收到上述错误消息代替but no message with that error number was found in sys.messages. If error is larger than 50000, make sure the user-defined message is added using sp_addmessage.
可能会出现如何处理抛出错误的过程,并且像SQL客户端一样继续插入到最后。
答案 0 :(得分:0)
想一想你必须要问什么,我认为你的问题的答案是:
您需要在其自己的TRY..CATCH块中放置可能导致您想要忽略的错误的EACH语句。在每个catch块中,您可以根据错误消息决定是否要删除它并停止处理,或者只是将其存储在变量中,然后继续。
然后在所有内容结束时,您可以检查您的变量,看看是否有任何您忽略的错误,并在那时将它们删除(如果您愿意),而不回滚已经运行的语句成功。