編集問題は別のものだったので、この質問はもはや有効ではありません。私の答えの下にある私の説明を見てください。
エチケットがわからないので、この質問は現状のままにしておきます
テーブルにデータを書き込むストアド プロシージャがあります。
ストアド プロシージャの呼び出しに Microsoft Practices Enterprise ライブラリを使用しています。ExecuteNonQuery への呼び出しを使用して、ストアド プロシージャを呼び出します。
ExecuteNonQuery が返された後、サード パーティのライブラリを呼び出します。約 100 ミリ秒で別のスレッドでコールバックされます。
次に、別のストアド プロシージャを呼び出して、書き込んだばかりのデータを取得します。約 99% のケースで、データが返されます。時々、行が返されないことがあります (つまり、データが見つからない)。デバッガーでこの条件を検出する条件付きブレーク ポイントを配置し、ストアド プロシージャを手動で再実行すると、常にデータが返されます。
これは、書き込みストアドプロシージャが呼び出されたときにコミットしていないだけで機能していると信じさせます。
私はSQLに関してはかなり初心者なので、何か間違ったことをしている可能性は十分にあります。その内容がデータベースにコミットされるまで、ストアドプロシージャの書き込みがブロックされると思っていたでしょう。
ストアド プロシージャの記述
ALTER PROCEDURE [dbo].[spWrite]
@guid varchar(50),
@data varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- see if this guid has already been added to the table
DECLARE @foundGuid varchar(50);
SELECT @foundGuid = [guid] from [dbo].[Details] where [guid] = @guid;
IF @foundGuid IS NULL
-- first time we've seen this guid
INSERT INTO [dbo].[Details] ( [guid], data ) VALUES (@guid, @data)
ELSE
-- updaeting or verifying order
UPDATE [dbo].[Details] SET data =@data WHERE [guid] = @guid
END
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ストアド プロシージャの読み取り
ALTER PROCEDURE [dbo].[spRead]
@guid varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT * from [dbo].[Details] where [guid] = @guid;
END