2

これは可能ですか?この理由は、処理のために TOP(1) 要素を順番にポップして、キューのようなテーブルを使用しているためです。そして、すぐに処理する行を挿入したいと思います。ちなみにce 3.5です、ありがとう。

4

3 に答える 3

4

IDまたはタイムスタンプのいずれかで、順序を維持するための列が必要です。次に、「select top(1) order by x desc」を実行して、最新のものを取得できます。

于 2009-02-16T12:56:11.550 に答える
3

データベースに優先順位の列を作成し、それを (ID とともに) 並べ替えます。

CREATE TABLE myqueue(priority INT NOT NULL, id INT IDENTITY NOT NULL PRIMARY KEY, payload VARCHAR(200) NOT NULL)

CREATE INDEX ix_myqueue(priority, id)

INSERT
INTO myqueue (priority, payload)
VALUES (0, 'Regular message')

INSERT
INTO myqueue (priority, payload)
VALUES (1, 'Urgent message')

SELECT id, payload
FROM myqueue
ORDER BY priority DESC, id DESC
TOP 1

id | payload
2  | Urgent message

DELETE
FROM mytable
WHERE id = 2

SELECT payload
FROM myqueue
ORDER BY priority DESC, id DESC
TOP 1

id | payload
1  | Regular message

DELETE
FROM mytable
WHERE id = 1
于 2009-02-16T13:01:34.313 に答える
1

1) テーブルをキューとして使用している場合は、ジョブに間違ったツールを使用しています。テーブルは、本質的に順序付けられていないデータのセットです。それの訳は

2) フィールドの値に基づいて行を並べ替えることができます。これは、テーブル内の他の行に先行する値を持つ値 (通常は ID) を持つ行を追加することで、途中に何かを「挿入」できることを意味します。

なぜデータベーステーブルを使用してこれを行うのですか? あなたは明らかに優先キューを探しています。ソフトウェアに障害が発生した場合に処理中のジョブを存続させたいという理由でこれを行っている場合は、すべてのアイテムを優先度とともにテーブルに追加することを検討してください。スケジューリング メカニズムからデータ ストレージを切り離します。

于 2009-02-16T12:53:12.337 に答える