SQL Server CE: вставить строку в верхнюю часть таблицы - PullRequest
1 голос
/ 16 февраля 2009

Это возможно? Причиной этого является то, что я использую таблицу, похожую на очередь, последовательно добавляя элементы TOP (1) для обработки. И я хотел бы вставить несколько строк для немедленной обработки. Кстати, это CE 3.5, спасибо.

Ответы [ 3 ]

4 голосов
/ 16 февраля 2009

Вам нужен столбец для поддержания порядка, либо идентификация, либо отметка времени. Затем вы можете сделать «выберите top (1) order by x desc», чтобы получить самый последний.

3 голосов
/ 16 февраля 2009

Создайте столбец приоритетов в вашей базе данных, затем выполните сортировку по нему (вместе с вашей идентификацией):

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
0 голосов
/ 16 февраля 2009

1) Если вы используете таблицу в качестве очереди, вы используете не тот инструмент для работы. Таблицы представляют собой наборы изначально неупорядоченных данных. Это потому что

2) Строки можно упорядочить по значению любого из их полей. Это означает, что вы можете «вставить» что-то посередине, добавив строку со значением (обычно идентификатором), значение которого будет предшествовать другим строкам таблицы.

Почему вы используете таблицу базы данных для этого? Вы явно ищете приоритетную очередь. Если вы делаете это потому, что хотите, чтобы обрабатываемые задания сохранялись в случае сбоя программного обеспечения, рассмотрите возможность добавления всех элементов с их приоритетом в таблицу, а затем вынимаете их и вставляете в соответствующую очередь с приоритетами в программное обеспечение, отделяя хранилище данных от механизма планирования.

...