0

明示的なトランザクション関連のコード(つまり、begin / rollback / commitトランザクション)を使用していないストアドプロシージャがありますが、次のように@@Trancount設定されています(ストアドプロシージャ中に2この値をテーブルの行エントリに書き込むことでこれを監視しています手順)。これは明らかに、それがどこかIMPLICIT_TRANSACTIONSに設定されていることを意味します。ON

ストアドプロシージャの先頭に次の行を追加しています...。

SET IMPLICIT_TRANSACTIONS OFF
GO

....これになるように:

USE [RentTrackingSystem]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET IMPLICIT_TRANSACTIONS OFF
GO
ALTER PROCEDURE [RTS].[GenerateAnnualPenalty] 
    -- Add the parameters for the stored procedure here

    @dueDate Date = NULL ,
    @fiscalYear numeric(4),
    @createdBy Varchar(50),
    @referenceForm Varchar(50),
    @referenceFormNo Varchar(50),
    @PENALTY_NO int ,
    @PenaltyCutOffDate date = NULL

AS

-- Rest of the body here ..

ただし、(ストアドプロシージャを変更するために)クエリを実行すると、そのウィンドウを閉じてから、同じストアドプロシージャのコードを再度開くと、その追加がなくなり、ストアドプロシージャは次のようになります。

USE [RentTrackingSystem]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [RTS].[GenerateAnnualPenalty] 
    -- Add the parameters for the stored procedure here

    @dueDate Date = NULL ,
    @fiscalYear numeric(4),
    @createdBy Varchar(50),
    @referenceForm Varchar(50),
    @referenceFormNo Varchar(50),
    @PENALTY_NO int ,
    @PenaltyCutOffDate date = NULL

AS

-- Rest of the body here ..

では、ここで何が起こっているのでしょうか。

4

1 に答える 1