如何将此批处理队列存储过程转换为SQLite中可用的内容

时间:2012-11-23 01:49:47

标签: sql tsql sqlite

我有一个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

1 个答案:

答案 0 :(得分:0)

SQLite does not have stored procedures(或任何其他控制语句)。 在嵌入式数据库中,这没有多大意义,因为无论如何代码都将在同一个进程中执行。

您必须以您用于访问数据库的任何语言实现您的程序。

至于队列,SQLites也没有它们,因为没有单独的服务器可以从您的程序异步运行。 只需直接执行各个SQL命令/查询。