我有一个存储过程spMyProc
。该过程传递一个表名作为参数@TableName
。在继续执行过程之前,验证表格是否存在非常重要。如何在SQL Server中引发自定义异常
如何在表名无效的情况下创建自定义异常来引发错误?
我知道TRY
和CATCH
但我不确定如何将它们与自定义例外放在一起。
问候。
我有一个存储过程spMyProc
。该过程传递一个表名作为参数@TableName
。在继续执行过程之前,验证表格是否存在非常重要。如何在SQL Server中引发自定义异常
如何在表名无效的情况下创建自定义异常来引发错误?
我知道TRY
和CATCH
但我不确定如何将它们与自定义例外放在一起。
问候。
调查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
您可以使用尝试捕捉和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
哪SQL Server的**版本**?在2012年,我们得到了一个新的'THROW'关键字.... – 2014-09-29 15:56:44
不幸的是2008!我无法等待升级到2014. – 2014-09-29 15:57:40
您应该能够使用['RAISERROR'](http://msdn.microsoft.com/zh-cn/library/ms178592.aspx)实现您的目标。声明 – 2014-09-29 15:58:44