1

これが私のStored procです。ここでは、すべてが正しいと思います

ALTER PROC USP_D_Delete
(
   @ID INT=NULL,
   @RETURN INT OUTPUT
)
AS
BEGIN

   SET NOCOUNT ON;

   BEGIN TRY
      BEGIN TRAN

         BEGIN

            DELETE FROM PE WHERE ID =@ID

         END

      COMMIT

      SET @RETURN = 1
      RETURN @RETURN

   END TRY
   BEGIN CATCH

      ROLLBACK
      SET @RETURN = 0
      RETURN @RETURN

   END CATCH

END

UIからこれを実行しようとすると、次のようにエラーが発生します

Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements.Previous count = 0, current count = 1

ANY助けてください、私はこの構文が正しいと思うので解決策を見つけることができませんでした、ROLLBACKの後にCOMMITを試みましたまた、それは役に立ちません..

4

2 に答える 2

0

多分私は何かが欠けているかもしれませんが、あなたのSPコードには意味がありません:

  1. DELETEステートメントはアトミックであり、明示的なトランザクションは必要ありません
  2. SP は常に 1 を返します。存在しない ID をフィードするDELETEと、サイレントに実行され、何も削除されないためです。テーブルが存在しない場合にのみ、問題が発生して例外が発生する可能性がありPEます。しかし、その場合、ロールバックするものは何もありません。

そうは言っても、SP全体は唯一のDELETEステートメントに要約できます

于 2013-07-19T07:44:11.413 に答える