【发布时间】:2019-04-20 02:16:30
【问题描述】:
执行存储过程时,为什么会收到以下错误消息?
消息 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';
【问题讨论】:
-
Bad habits to kick : declaring VARCHAR without (length) - 您应该始终为您使用的任何
varchar变量和参数提供一个长度。对于参数,如果您省略显式长度,您将获得长度为恰好一个字符的参数 - 这通常不是您想要的..... -
在
AS之后添加BEGIN并在存储过程的末尾添加END。
标签: sql-server tsql stored-procedures transactions