Tsql теория > Реализация очереди на MSSQL 2005 и выше
01.04.2013 14:05:02
Наиболее часто встречающиеся слова в статье:
[QueueID] [очереди] [OrderID] [первого] [вставшего] [QSorted] [Таблица] [которую] [разгребать] [OBJECT_ID]
Статья:
-- Таблица, которую будем разгребать при помощи очереди IF OBJECT_ID('dbo.Queue') IS NOT NULL DROP TABLE dbo.[Queue] CREATE TABLE dbo.[Queue] ( [QueueID] INT PRIMARY KEY , [OrderID] INT IDENTITY(1, 1) UNIQUE ) -- Заполняем таблицу-очередь фиктивными данными INSERT dbo.[Queue] ( [QueueID] ) VALUES ( 1 ), ( 3 ), ( 2 ) -- Начинаем разбор очереди WHILE EXISTS ( SELECT * FROM dbo.[Queue] ) BEGIN -- Пересоздаем выходной список переменных DECLARE @Queue TABLE ( QueueID INT ) DELETE @Queue -- Берем из очереди первого вставшего DELETE TOP ( 1 ) Q OUTPUT deleted.QueueID INTO @Queue FROM dbo.[Queue] Q JOIN ( SELECT TOP 1 [QueueID] FROM dbo.[Queue] ORDER BY [OrderID] ) QSorted ON Q.[QueueID] = QSorted.[QueueID] -- Отдаем первого вставшего в работу другому модулю... SELECT * FROM @Queue END