Итак, вот что у меня есть на данный момент:
SELECT
ROW_NUMBER() OVER (PARTITION BY [Workstation] ORDER BY [Ship Date], [RootID], [Workstation]) as Priority
,bm.[Customer]
,[ProductionOrder]
,[RootID]
,[SalesOrder]
,[Line]
,[QtyID]
,[TotalQty]
,[Material]
,[Config]
,[Description]
,[Workstation]
,[ConfigGroup]
,[Business Unit]
,[StartDate]
,[FinishDate]
,[ShipDate]
INTO #OrderInsert
FROM
[BoomsBuildMaster] as bm
INNER JOIN
[BoomsBuildScheduleTEST] as bs
ON bm.RootID = bs.[Sales Order] + '_' + bs.[Line No]
WHERE bm.ProductionOrder NOT IN (SELECT [ProductionOrder] FROM [BoomsBuilder])
AND bs.Status = 'Ready'
UPDATE [BoomsBuilder]
SET Priority = Priority + (SELECT (MAX(Priority) - MIN(Priority) + 1) FROM #OrderInsert)
WHERE Priority >= (SELECT MIN(Priority) FROM #OrderInsert)
INSERT INTO [BoomsBuilder]
(
[Priority]
,[Customer]
,[ProductionOrder]
,[RootID]
,[SalesOrder]
,[Line]
,[QtyID]
,[TotalQty]
,[Material]
,[Config]
,[Description]
,[Workstation]
,[ConfigGroup]
,[Business Unit]
,[StartDate]
,[FinishDate]
,[ShipDate]
)
SELECT * FROM #OrderInsert;
Что здесь происходит: эта хранимая процедура срабатывает, когда таблица [BoomsBuildScheduleTEST]
обновляет строку до Status
«готово».
Допустим, одновременно введены три новых заказа с приоритетами (5, 6, 7). Затем текущие (5, 6, 7) заказы будут перемещены в (8, 9, 10), а все, что после этого, будет перемещено в (11, 12, 13 ...). И тогда будет вставлен новый (5, 6, 7).
Это будет работать для одного вставляемого заказа или даже для нескольких заказов, которые имеют последовательный приоритет. ОДНАКО, это не сработает, если, например, добавлены два новых заказа и приоритеты равны (3,7) соответственно. Не знаю, что делать в таком случае.