Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将此批处理队列存储过程转换为SQLite中可用的内容_Sql_Tsql_Sqlite - Fatal编程技术网

如何将此批处理队列存储过程转换为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

我有一个SQL存储过程,用于在队列中获取一批结果。我正在考虑迁移到Sqlite数据库,并想知道如果可能的话,我将如何着手进行这项工作

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命令/查询