SQL Server 2014(v12.0.5546)-我有一个“主”存储过程,我从中运行许多其他过程。如果出了一个错误,我希望它打印一行说明。
我今天运行了它,主存储过程中的一个存储过程返回了一个错误,指出我尝试的表插入变量数量错误,但没有显示错误。
我认为如果成功,存储过程将返回0,因此除此以外的任何其他操作都将意味着错误。我错了吗,或者我的程序有缺陷吗?
仅供参考,如果遇到错误,我不需要它停止运行,我只需要它吐出错误消息,这样我就知道它在哪里失败了。一切都说完了,这将增长到20-30个存储过程。
这是主存储过程:
findfirst
答案 0 :(得分:1)
我认为如果成功,存储过程将返回0,因此除此以外的任何其他操作都将意味着错误。我错了吗,或者我的程序有缺陷吗?
存储过程返回您告诉它们的任何值。如果没有return语句,则它们返回成功0
。
通常接受的做法是,成功返回0,失败返回错误代码。但这不是强制性的。
您指的是用户存储过程。您需要调查它们在您的环境中如何工作。
我还建议您将存储过程的主体放在begin
/ end
块中。
答案 1 :(得分:0)
主存储过程中返回的一个存储过程 一个错误,说我正在尝试的表插入有错误 数量的变量,但没有显示错误。
这似乎是编译错误。编译错误后将不会设置返回代码,因此分配的变量将保持不变。例如:
CREATE PROC dbo.ExampleCompilationError
AS
SELECT * FROM dbo.ThisTableDoesNotExist;
GO
DECLARE @rc int = NULL;
EXEC @rc = dbo.ExampleCompilationError;
SELECT @rc;
GO
此代码的返回代码仍为NULL
。
您可以用TRY / CATCH包围每个proc执行,这将在内部范围内捕获编译错误和执行时间错误:
BEGIN TRY
EXEC dbo.ExampleCompilationError;
END TRY
BEGIN CATCH
PRINT 'ExampleCompolationError failed';
END CATCH;