1

我有一个 SQL 存储过程,用于在队列中获取一批结果。我正在寻找转移到 Sqlite DB,并且想知道如果可能的话我将如何去做。

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
4

1 回答 1

0

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

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

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

于 2012-11-23T08:42:59.940 回答