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にはストアド プロシージャ(またはその他の制御ステートメント)がありません。組み込みデータベースでは、コードがとにかく同じプロセスで実行されるため、これはあまり意味がありません。

データベースへのアクセスに使用している言語に関係なく、プロシージャを実装する必要があります。

キューに関しては、プログラムから非同期で実行される別のサーバーがないため、SQLite にもキューはありません。個々の SQL コマンド/クエリを直接実行するだけです。

于 2012-11-23T08:42:59.940 に答える