编辑这个问题不再有效,因为问题是别的。请在我的回答中查看下面的解释。
我不确定礼仪,所以我将把这个问题留在当前状态
我有一个将一些数据写入表的存储过程。
我正在使用 Microsoft Practices Enterprise 库进行存储过程调用。我使用对 ExecuteNonQuery 的调用来调用存储过程。
在 ExecuteNonQuery 返回后,我调用了第 3 方库。它会在大约 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