2
は省略しないで必要な部品と私のストアドプロシージャのシェルです:EXECUTEの後のトランザクション数は、一致しない数のBEGINおよびCOMMIT文を示します。間違った場所でコミットしますか?ここ
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure --name of sproc
--declare sproc params
AS
BEGIN
SET XACT_ABORT ON
SET NOCOUNT ON
BEGIN TRY
BEGIN TRANSACTION
--declare a few vars
--declare some table variables
--do some work
IF (--some condition here)
BEGIN
--actually do the work
END
ELSE
BEGIN
ROLLBACK TRANSACTION
SET @error = 'some value cannot be NULL'
RAISERROR(@error, 16, 1)
RETURN @error
END
COMMIT
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
SELECT @error = ERROR_NUMBER()
, @message = ERROR_MESSAGE()
, @severity = ERROR_SEVERITY()
, @state = ERROR_STATE()
RAISERROR(@message, @severity, @state)
RETURN @error
END CATCH
END
GO
私は「--actuallyやるいくつかの作業」に(この記事の主題ではない)、デッドロックエラーを取得していますそして、 "Transaction count ..."エラーがスローされます。
COMMITは間違った場所にありますか?
ありがとうございます。これは完璧な意味合いがあり、 – crackedcornjimmy