我有两个存储过程,一个AddReportsApi用于使用BEGIN TRANSACTIONand插入数据COMMIT TRANSACTION,另一个GetReportsApi用于选择插入行的数据。
我INSERT首先调用存储过程,然后调用SELECT存储过程,但有时它不会为谓词SearchItemId中使用的传入行返回任何行。WHERE
如果我第二次执行 SELECT 存储过程,它会返回预期的行。
将数据插入表中是否有延迟?请注意,存储过程是从 HangFire 后台作业框架中调用的。根据我的测试,HangFire 不应该影响 INSERT 和 SELECT 存储过程调用。INSERT 存储过程在一分钟内被调用多次,以将记录插入到 ReprotsApi 表中。
插入存储过程:
CREATE PROCEDURE [dbo].[AddReportsApi]
@OrderID nvarchar(50),
@SearchItemId nvarchar(50),
@SubjectID nvarchar(50),
@SearchType nvarchar(50),
@ApiName nvarchar(50),
@ApiRequest text,
@ApiResponse text,
@IsActive bit,
@CreatedOn datetime,
@CreatedBy nvarchar(50),
@ModifyOn datetime,
@ModifyBy nvarchar(50),
@HitType nvarchar(2)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION
INSERT INTO [dbo].[ReportsApi] ([OrderID], [SearchItemId], [SubjectID], [SearchType],
[ApiName], [ApiRequest], [ApiResponse], [IsActive],
[CreatedOn], [CreatedBy],
[ModifyOn], [ModifyBy], [HitType])
VALUES (@OrderID, @SearchItemId, @SubjectID, @SearchType,
@ApiName, @ApiRequest, @ApiResponse, @IsActive,
@CreatedOn, @CreatedBy,
@ModifyOn, @ModifyBy, @HitType)
IF (@@ERROR != 0)
BEGIN
ROLLBACK TRANSACTION
END
ELSE
COMMIT TRANSACTION
END
选择存储过程:
CREATE PROCEDURE [dbo].[GetReportsApi]
@OrderID nvarchar(50)
,@SearchItemId nvarchar(50)
,@SubjectID nvarchar(50)
,@CreatedBy nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;
SELECT [Id]
,[OrderID]
,[SearchItemId]
,[SubjectID]
,[SearchType]
,[ApiName]
,[ApiRequest]
,[ApiResponse]
,[IsActive]
,[CreatedOn]
,[CreatedBy]
,[ModifyOn]
,[ModifyBy]
,[HitType]
FROM [dbo].[ReportsApi] WHERE [SearchItemId] = @SearchItemId
END