Sql server ';TRY-CATCH';语句在存储过程中未按预期工作
这段代码工作正常,没有任何错误。但是我想看到try-catch语句的输出,并用try-catch语句包装了过程主体,故意犯了一个错误。但是,错误不会显示为网格结果集中的输出。尽管如此,它还是以默认方式出现。我需要知道我对这句话的使用是否正确。如果没有,请有人向我解释一下try-catch语句的用法Sql server ';TRY-CATCH';语句在存储过程中未按预期工作,sql-server,stored-procedures,try-catch,Sql Server,Stored Procedures,Try Catch,这段代码工作正常,没有任何错误。但是我想看到try-catch语句的输出,并用try-catch语句包装了过程主体,故意犯了一个错误。但是,错误不会显示为网格结果集中的输出。尽管如此,它还是以默认方式出现。我需要知道我对这句话的使用是否正确。如果没有,请有人向我解释一下try-catch语句的用法 ALTER PROCEDURE UpdateStudent (@UpdateStudentDetails [UDTT_Stud] READONLY) AS BEGIN TRY BEGI
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]
“更新”附近的语法不正确
正如注释所说,您有一个语法错误,而不是try…catch可能捕捉到的运行时错误 您已经为StudentDetails表设置了别名,因此应该使用它,而不是更新StudentDetails。 我还删除了一个不必要的开始结束块内 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
请阅读,try/catch不捕获语法错误,仅捕获运行时错误。请尝试一个简单的错误,例如
select convert(datetime,'12 juh 2019')
能否请您输入windows结果,您得到的结果是什么?try-catch语法正确,可能存在其他问题。try-catch捕获到运行时错误。Msg 102,级别15,状态1,过程UpdateStudent,第5行[批处理开始行0]靠近“UPATE”的语法不正确@MukeshArora这是我得到的输出这是一个语法错误,如果出现任何运行时错误,try-catch块将捕获该错误,try-catch块将不会捕获该错误。e、 g.在您的情况下,假设update语句由于引用完整性或更新将被try catch块捕获的not NULL列中的NULL值而失败。若要验证这一点,请对update语句进行注释,并将此select 1/0而不是update语句放入其中,然后运行您的过程,您将看到try catch块起作用