执行存储过程时,为什么会收到以下错误消息?
消息266,级别16,状态2,过程spAddCustomer,行0 [批处理开始第21行]
EXECUTE之后的事务计数指示BEGIN和COMMIT语句的数量不匹配。上一个计数= 1,当前计数= 2。
有什么帮助,谢谢。
存储过程代码:
CREATE PROC spAddCustomer
@FirstName VARCHAR = INPUT,
@LastName VARCHAR = INPUT,
@EmailAddress VARCHAR = INPUT,
@PhoneNumber VARCHAR = INPUT
AS
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO sales.CustomerPII (FirstName, LastName, EmailAddress, PhoneNumber)
VALUES (@FirstName, @LastName, @EmailAddress, @PhoneNumber);
COMMIT TRANSACTION
END TRY
BEGIN CATCH
--Rows inserted still exist
--SELECT ERROR_NUMBER()
--ROLLBACK TRANSACTION --Any transaction work will be undone
END CATCH;
已执行
EXEC spAddCustomer 'FirstTest', 'LastTest', 'EmailTest', 'AddressTest';
答案 0 :(得分:3)
取消注释此行:
ROLLBACK TRANSACTION --Any transaction work will be undone
答案 1 :(得分:1)
尝试在存储过程中将XACT_ABORT设置为ON。当SET XACT_ABORT为ON并且T-SQL语句引发运行时错误时,SQL Server将自动回滚当前事务。尝试如下:
USE AdventureWorks2016CTP3
GO
CREATE PROC spAddCustomer
@FirstName varchar = INPUT,
@LastName varchar = INPUT,
@EmailAddress varchar = INPUT,
@PhoneNumber varchar = INPUT
AS
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO sales.CustomerPII (FirstName,LastName,EmailAddress,PhoneNumber)
VALUES(@FirstName, @LastName, @EmailAddress, @PhoneNumber);
COMMIT TRANSACTION
END TRY
BEGIN CATCH
END CATCH;