SQL Server - ошибка после выполнения хранимой процедуры - PullRequest
0 голосов
/ 17 ноября 2018

Почему при выполнении моей хранимой процедуры появляется следующее сообщение об ошибке?

Сообщение 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';

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Попробуйте установить XACT_ABORT ON в хранимой процедуре.Когда SET XACT_ABORT включен, а инструкция 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;
0 голосов
/ 17 ноября 2018

Откомментируйте эту строку:

ROLLBACK TRANSACTION --Any transaction work will be undone
...