この非常に基本的なストアド プロシージャを作成しました。これは、ユーザーが特定の種類のアイテムを作成したときに cms によって呼び出されます。ただし、同じデータで作成された cms アイテムごとに 2 つの行を取得する場合があるようですが、1 つずれていSourceID
ます。私はSQLの仕事をあまりしないので、これは基本的なことかもしれませんが、これが起こらないようにするために、ストアドプロシージャでテーブルを明示的にロックする必要がありますか?
ストアド プロシージャのコードは次のとおりです。
BEGIN
SET @newid = (SELECT MAX(SourceID)+1 from [dbo].[sourcecode])
IF NOT EXISTS(SELECT SourceId from [dbo].[sourcecode] where SourceId = @newid)
INSERT INTO [dbo].[sourcecode]
(
SourceID,
Description,
RunCounts,
ShowOnReport,
SourceParentID,
ApprovedSource,
Created
)
VALUES
(
@newid,
@Desc,
1,
@ShowOnReport,
1,
1,
GetDate()
)
RETURN @newid
END
複製されたデータの例を次に示します (無関係な列がいくつかありません)。
SourceId Description Created
676 some text 2012-10-17 09:42:36.553
677 some text 2012-10-17 09:43:01.380