明示的なトランザクション関連のコード(つまり、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 ..
では、ここで何が起こっているのでしょうか。