Sql server 2008 尝试SQL中的Catch过程
我正在创建一个存储过程。它创建fine,如果我给出错误的值,它应该将错误消息保存在DBErrors表中。就像在本例中,我没有在employeeid中给出int类型值 它没有在DBerrors表中保存错误值。请告诉我这里怎么了 我已经创建了employee和DBErrors表Sql server 2008 尝试SQL中的Catch过程,sql-server-2008,Sql Server 2008,我正在创建一个存储过程。它创建fine,如果我给出错误的值,它应该将错误消息保存在DBErrors表中。就像在本例中,我没有在employeeid中给出int类型值 它没有在DBerrors表中保存错误值。请告诉我这里怎么了 我已经创建了employee和DBErrors表 CREATE PROCEDURE [SP_updateEmployee] (@EMPLOYEEID int, @NAME varchar(50), @ADDRESS varchar(50)) ---add try
CREATE PROCEDURE [SP_updateEmployee]
(@EMPLOYEEID int, @NAME varchar(50), @ADDRESS varchar(50))
---add try catch in update statement
AS
BEGIN TRY
update Employee
SET employeeid=@EmployeeID,NAME=@Name,[ADDRESS]= @ADDRESS
where employeeid=@employeeID
END TRY
---stores error in error table
BEGIN CATCH
INSERT INTO DBErrors (USERNAME,ERRORNUMBER,ERRORMESSAGE)
VALUES (SUSER_SNAME(),ERROR_NUMBER(),ERROR_MESSAGE())
END CATCH
--drop PROCEDURE SP_updateEmployee
EXEC [SP_updateEmployee] t,'y','q'
----select * from DBErrors
只有在TRY块中发生错误/异常时,才会在DBErrors表中捕获错误。在您的情况下,用户可能会传递字符串而不是INT,因此生成的异常将位于TRY块之外的参数declare部分 Soln:DECLARE@EMPLOYEEID VARCHAR(10) 只要用户将字符串值传递为
EXEC [SP_updateEmployee] t,'y','q'
在参数声明部分不会生成异常,并且在插入值时,系统将注意引发适当的异常,例如
Conversion failed when converting the varchar value 't' to data type int.
由于这在您的TRY块中,因此当生成异常时,它将跳转到CATCH块,您将能够在表中捕获此数据。执行存储过程时是否收到错误?这将在调用您的过程的
EXEC
中失败,而不是在过程本身中失败。简而言之,它永远不会到达TRY
语句。
Conversion failed when converting the varchar value 't' to data type int.