Sql server 2012 SQL事务/错误处理/TryandCatch

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语句应使用事务构建(可重复

学习SQL编程(2012版)课程,完全陷入困境,无论我尝试多少次,程序都无法工作。要求(问题)以及我到目前为止的情况如下。虚线下面是我为错误处理编写的另一个过程。请帮我完成这个…请

/*创建一个接受StockName、NewOpenPrice、NewClosePrice的存储过程

a。如果股票名称不存在,则应将新记录添加到dbo.Stocks表中

b。如果股票名称确实存在,OpenPrice和ClosePrice将使用新插入的价格进行更新

c。Insert和Update语句应使用事务构建(可重复读取隔离级别)

d。Update和Insert语句应使用Try Catch语句。如果存在错误,则应调用dbo.error\u处理程序存储过程。 */


*这是我的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