如何将此批处理队列存储过程转换为SQLite中可用的内容
我有一个SQL存储过程,用于在队列中获取一批结果。我正在考虑迁移到Sqlite数据库,并想知道如果可能的话,我将如何着手进行这项工作如何将此批处理队列存储过程转换为SQLite中可用的内容,sql,tsql,sqlite,Sql,Tsql,Sqlite,我有一个SQL存储过程,用于在队列中获取一批结果。我正在考虑迁移到Sqlite数据库,并想知道如果可能的话,我将如何着手进行这项工作 ALTER PROCEDURE [dbo].[GetNextItemInQueue] @LockedBy varchar(75) AS SET NOCOUNT ON; declare @Error int, @ExitCode int, @RowCou
ALTER PROCEDURE [dbo].[GetNextItemInQueue]
@LockedBy varchar(75)
AS
SET NOCOUNT ON;
declare
@Error int,
@ExitCode int,
@RowCount int,
@PendingStatus varchar(75),
@MinutesBeforeBreakLock int,
@RequestId int,
@BatchSize int
select
@Error = 0,
@ExitCode = 0,
@RowCount = 0,
@PendingStatus = 'Pending',
@MinutesBeforeBreakLock = 1,
@BatchSize = 100
BEGIN TRY
BEGIN TRANSACTION ProcessQueue
UPDATE TOP(@BatchSize) UploadQueue WITH (UPDLOCK, READPAST)
SET
LockedBy = @LockedBy,
LockedTime = GETDATE()
OUTPUT inserted.Id, inserted.LockedTime, inserted.CompletedTime, inserted.RequestType, inserted.RequestedTime, inserted.Status, inserted.LockedBy, inserted.Data
WHERE
STATUS = @PendingStatus
AND (LockedTime IS NULL OR
DateDiff(mi, LockedTime, GetDate()) >= @MinutesBeforeBreakLock)
COMMIT TRANSACTION ProcessQueue
END TRY
BEGIN CATCH
IF XACT_STATE() > 0
ROLLBACK TRANSACTION ProcessQueue;
ELSE IF XACT_STATE() < 0
ROLLBACK TRANSACTION;
END CATCH
ALTER过程[dbo]。[GetNextItemQueue]
@被瓦尔查尔锁定(75)
作为
不计数;
声明
@错误int,
@出口代码int,
@行计数int,
@彭丁斯塔特斯·瓦尔查尔(75岁),
@BreakLock int之前的分钟数,
@请求ID int,
@批量大小int
选择
@错误=0,
@ExitCode=0,
@行计数=0,
@PendingStatus=‘待定’,
@BreakLock之前的分钟数=1,
@批量大小=100
开始尝试
开始事务处理队列
使用(UPDLOCK,READPAST)更新TOP(@BatchSize)UploadQueue
设置
LockedBy=@LockedBy,
LockedTime=GETDATE()
输出inserted.Id、inserted.LockedTime、inserted.CompletedTime、inserted.RequestType、inserted.RequestedTime、inserted.Status、inserted.LockedBy、inserted.Data
哪里
状态=@PendingStatus
和(LockedTime为NULL或
DateDiff(mi,LockedTime,GetDate())>=@minutesBeforeBarkLock)
提交事务处理队列
结束尝试
开始捕捉
如果XACT_STATE()大于0
回滚事务处理队列;
如果XACT_STATE()小于0,则为ELSE
回滚事务;
端接
SQLite(或任何其他控制语句)。
在嵌入式数据库中,这没有多大意义,因为代码将在同一进程中执行
您必须用访问数据库所用的任何语言实现您的过程
至于队列,SQLite也没有,因为没有单独的服务器可以从您的程序异步运行。
只需直接执行单个SQL命令/查询