"TRY - CATCH"语句在存储过程中未按预期工作



这段代码可以正常工作,没有任何错误。但是我想看到 try-catch 语句的输出,并用 try-catch 语句包装过程的主体并故意犯了一个错误。但是,该错误不会在网格结果集中显示为输出。尽管如此,它还是以默认方式出现。我需要知道我对这个陈述的用法是否正确。如果没有,有人可以向我解释一下 try-catch 语句的用法吗?

ALTER PROCEDURE UpdateStudent
(@UpdateStudentDetails [UDTT_Stud] READONLY)
AS
BEGIN TRY
BEGIN
UPDATE dbo.StudentDetails        --Deleted 'A' of UPDATE to give an  error
SET FirstName = upStud.FirstName,
LastName = upStud.Lastname,
HomeAddress = upStud.HomeAddress,
EmailAddress = upStud.EmailAddress
FROM
StudentDetails stud
INNER JOIN
@UpdateStudentDetails upStud ON stud.IndexNumber = upStud.IndexNumber
END
END TRY
BEGIN CATCH
SELECT
ERROR_MESSAGE() AS 'Error Message',
ERROR_STATE() AS 'Error State',
ERROR_SEVERITY() AS 'Error Severity'
END CATCH

这是我得到的输出

Msg 102,级别 15,状态 1,过程更新学生,第 5 行 [批处理开始第 0 行]
"UPDATE"附近的语法不正确

正如注释所说,您有一个语法错误,而不是 try 可能捕获的运行时错误......抓住。

您已为"学生详细信息">

表设置了别名,因此应使用它而不是"更新学生详细信息"。 我还删除了里面一个不必要的开始结束块 BEGIN TRY 块,并为整个存储过程添加了外部 BEGIN END。

ALTER PROCEDURE UpdateStudent
(@UpdateStudentDetails [UDTT_Stud] READONLY)
AS 
BEGIN -- The entire stored procedure should be inside a BEGIN END block
BEGIN TRY
UPDATE stud -- We use the alias
SET FirstName = upStud.FirstName,
LastName = upStud.Lastname,
HomeAddress = upStud.HomeAddress,
EmailAddress = upStud.EmailAddress
FROM
StudentDetails stud
INNER JOIN
@UpdateStudentDetails upStud ON stud.IndexNumber = upStud.IndexNumber
END TRY
BEGIN CATCH
SELECT
ERROR_MESSAGE() AS 'Error Message',
ERROR_STATE() AS 'Error State',
ERROR_SEVERITY() AS 'Error Severity'
END CATCH
END

最新更新