Sql server 2012 SQL事务/错误处理/TryandCatch
学习SQL编程(2012版)课程,完全陷入困境,无论我尝试多少次,程序都无法工作。要求(问题)以及我到目前为止的情况如下。虚线下面是我为错误处理编写的另一个过程。请帮我完成这个…请 /*创建一个接受StockName、NewOpenPrice、NewClosePrice的存储过程 a。如果股票名称不存在,则应将新记录添加到dbo.Stocks表中 b。如果股票名称确实存在,OpenPrice和ClosePrice将使用新插入的价格进行更新 c。Insert和Update语句应使用事务构建(可重复读取隔离级别) d。Update和Insert语句应使用Try Catch语句。如果存在错误,则应调用dbo.error\u处理程序存储过程。 */Sql server 2012 SQL事务/错误处理/TryandCatch,sql-server-2012,Sql Server 2012,学习SQL编程(2012版)课程,完全陷入困境,无论我尝试多少次,程序都无法工作。要求(问题)以及我到目前为止的情况如下。虚线下面是我为错误处理编写的另一个过程。请帮我完成这个…请 /*创建一个接受StockName、NewOpenPrice、NewClosePrice的存储过程 a。如果股票名称不存在,则应将新记录添加到dbo.Stocks表中 b。如果股票名称确实存在,OpenPrice和ClosePrice将使用新插入的价格进行更新 c。Insert和Update语句应使用事务构建(可重复
*这是我的ErrorHandler存储过程查询
ALTER PROCEDURE dbo.error_handler
as
BEGIN
DECLARE @errnum INT,
@severity INT,
@errstate INT,
@proc NVARCHAR(126),
@line INT,
@message NVARCHAR(4000)
-- capture the error information that caused the CATCH block to be invoked
SELECT @errnum = ERROR_NUMBER(),
@severity = ERROR_SEVERITY(),
@errstate = ERROR_STATE(),
@proc = ERROR_PROCEDURE(),
@line = ERROR_LINE(),
@message = ERROR_MESSAGE()
end
ALTER PROCEDURE dbo.error_handler
as
BEGIN
DECLARE @errnum INT,
@severity INT,
@errstate INT,
@proc NVARCHAR(126),
@line INT,
@message NVARCHAR(4000)
-- capture the error information that caused the CATCH block to be invoked
SELECT @errnum = ERROR_NUMBER(),
@severity = ERROR_SEVERITY(),
@errstate = ERROR_STATE(),
@proc = ERROR_PROCEDURE(),
@line = ERROR_LINE(),
@message = ERROR_MESSAGE()
end
Create PROCEDURE [dbo].[USP_Stocks]
(@Name varchar(25), @OpenPrice MONEY, @ClosePrice MONEY)
AS
BEGIN
-----Name does NOT exist
IF NOT EXISTS (SELECT StockName FROM [dbo].[Stocks]
WHERE StockName = @Name)
BEGIN
BEGIN TRY
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
INSERT INTO dbo.Stocks (StockName, OpenPrice, ClosePrice)
VALUES (@Name ,@OpenPrice, @ClosePrice)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
EXEC dbo.error_handler
ROLLBACK
END CATCH
END
----If name DOES exist
ELSE
BEGIN
BEGIN TRY
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
UPDATE dbo.Stocks SET OpenPrice =@OpenPrice, ClosePrice= @ClosePrice
where StockName = @Name
Commit transaction
END TRY
BEGIN CATCH
ROLLBACK TRUANSACTION
EXEC dbo.error_handler
END CATCH
END
END