编辑此问题不再有效,因为问题是其他问题。请在下面的回答中查看我的解释。
我不确定礼仪,所以我将这个问题保留在当前状态
我有一个存储过程,可以将一些数据写入表中。
我正在使用Microsoft Practices Enterprise库进行存储过程调用。我使用对ExecuteNonQuery的调用来调用存储过程。
在ExecuteNonQuery返回之后,我调用了一个第三方库。它在大约100毫秒内在单独的线程上给我回电。
然后,我调用另一个存储过程来提取我刚刚编写的数据。在大约99%的情况下,将返回数据。偶尔,它不返回任何行(即找不到数据)。如果我在调试器中放置条件断点以检测此条件并手动重新运行存储过程,它将始终返回我的数据。
这使我相信,编写存储过程在调用时只是没有提交而已。
对于sql来说,我还是一个新手,所以我做错了完全有可能。我以为编写存储过程会阻塞,直到其内容提交给db。
编写存储过程
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
Run Code Online (Sandbox Code Playgroud)
阅读存储过程
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
Run Code Online (Sandbox Code Playgroud)
要实际阻止其他事务并手动提交,可能会添加
BEGIN TRANSACTION
--place your
--transactions you wish to do here
--if everything was okay
COMMIT TRANSACTION
--or
--ROLLBACK TRANSACTION if something went wrong
Run Code Online (Sandbox Code Playgroud)
可以帮助你吗?
| 归档时间: |
|
| 查看次数: |
16403 次 |
| 最近记录: |