我有一个存储过程spMyProc
。该过程以表名作为参数@TableName
传递。在继续执行过程主体之前验证表是否存在是很重要的。
如果表名无效,如何创建自定义异常以引发错误?
我知道TRY
和CATCH
,但我不确定如何将其与自定义例外结合在一起。
问候。
答案 0 :(得分:3)
了解RAISERROR()的功能。
TRY .. CATCH的工作原理与任何其他编程语言相同
BEGIN TRY
-- do your checks
IF NOT EXISTS(SELECT 1 FROM sys.tables WHERE NAME = @TableName)
BEGIN
RAISERROR('Table does not exist', 16,1)
END
-- rest of the code if checks are passed
-- if above checks are not passed and you riase an error
-- control will skip any code in TRY Block after the error has been
-- Raised and staright jump to Catch block.
END TRY
BEGIN CATCH
-- Do your error logging
-- Other stuff
-- you have access to ERROR_ functions here to get detailed info about errors
END CATCH
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用try catch和raiseerror来处理自定义异常,例如:
begin try
--sql statements
end try
begin catch
RAISERROR
(
ERROR_MESSAGE(), -- or add your custom message
ERROR_SEVERITY(),
1,
ERROR_NUMBER(), -- parameter: original error number.
ERROR_SEVERITY(), -- parameter: original error severity.
ERROR_STATE(), -- parameter: original error state.
ISNULL(ERROR_PROCEDURE(), '-'), -- parameter: original error procedure name.
ERROR_LINE() -- parameter: original error line number.
end catch