2009-02-16 106 views
1

這是可行的嗎?原因是我使用了一個像隊列一樣的表格,依次彈出TOP(1)元素進行處理。我想插入一些行來立即處理。順便說一句,謝謝。SQL Server CE:將行插入表頂部

回答

4

您需要一個列來維護訂單,身份或時間戳。然後你可以通過「x desc」選擇「top(1)order」來獲得最近的。

+0

我正在考慮這樣的事情,添加一個優先級列並按順序排序。希望它允許我修改非空表的模式,謝謝。 – Pablote 2009-02-16 13:06:03

0

1)如果你使用表格作爲隊列,你使用的工具是錯誤的工具。表格是固有的無序數據集。這是因爲

2)行可以根據其任何字段的值進行排序。這意味着您可以通過向該行添加一個值(通常是ID)並在表格中的其他行之前添加一個值來「插入」中間的內容。

爲什麼使用數據庫表來做到這一點?你顯然正在尋找一個優先隊列。如果您這樣做是因爲您希望在軟件失敗時正在處理的作業持續存在,請考慮將所有項及其優先級添加到表中,然後將其取出並插入到適當的優先級隊列中軟件,將您的數據存儲從您的調度機制中分離出來。

+0

我知道表是什麼,但有時也有這份工作沒有合適的工具。我需要一個持久的事務存儲和msmq或類似的東西,這是不可能安裝的。由於只有一個應用程序訪問商店,SqlServer CE似乎是最好的選擇,它的表現相當好。 – Pablote 2009-02-16 13:05:01

3

你的數據庫(連同您的身份)創建一個優先級列,然後排序就可以了:

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