简体   繁体   English

SQL Server-执行存储过程后出错

[英]SQL Server - error after executing stored procedure

When executing my stored procedure, why do I get the following error message? 执行存储过程时,为什么会收到以下错误消息?

Msg 266, Level 16, State 2, Procedure spAddCustomer, Line 0 [Batch Start Line 21] 消息266,级别16,状态2,过程spAddCustomer,行0 [批处理开始行21]
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. EXECUTE之后的事务计数指示BEGIN和COMMIT语句的数量不匹配。 Previous count = 1, current count = 2. 上一个计数= 1,当前计数= 2。

Anything help, thanks. 任何帮助,谢谢。

Stored procedure code: 存储过程代码:

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;

Executed 执行

EXEC spAddCustomer 'FirstTest', 'LastTest', 'EmailTest', 'AddressTest';

取消注释此行:

ROLLBACK TRANSACTION --Any transaction work will be undone

Try setting XACT_ABORT ON in the stored procedure. 尝试在存储过程中将XACT_ABORT设置为ON。 When SET XACT_ABORT is ON and T-SQL statement raises a run-time error, SQL Server automatically rolls back the current transaction. 当SET XACT_ABORT为ON并且T-SQL语句引发运行时错误时,SQL Server将自动回滚当前事务。 Try it as follows: 尝试如下:

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM