Обновить ItemId из таблицы Orderline в хранимой процедуре - PullRequest
1 голос
/ 28 мая 2020

Мне нужно обновить ItemId из таблицы Orderline.

Строка заказа таблица

OrderlineId 
SKU 
ItemId

Элемент таблица

ItemId 
SKU 

Это результат, которого я хочу достичь

Таблица заказа

OrderlineId  SKU      ItemId
1            SKUabc   NULL
2            SKU13    NULL

Таблица позиций

ItemId       SKU
10           SKUabc
11           SKU13

РЕЗУЛЬТАТ:

Таблица строки заказа

OrderlineId  SKU      ItemId
1            SKUabc   10
2            SKU13    11

Итак, мне нужно получить все данные из Orderline, где ItemId равно NULL, затем l oop, эти данные затем запрашивают таблицу элементов, используя Orderline.SKU, затем обновляют Orderline.ItemId

В настоящее время у меня есть этот код, но он еще не работает.

ALTER PROCEDURE [dbo].[UpdateOrderlinesItemId]
AS
    DECLARE @MyCursor CURSOR;
    DECLARE @ItemCursor CURSOR;
    DECLARE @SKU int;
    DECLARE @Item int;
BEGIN
    SET @MyCursor = CURSOR FOR
        SELECT 
            ol.OrderLineId, ol.ItemId
        FROM 
            [OrderLine] AS ol
        WHERE 
            ol.ItemId IS NULL

    OPEN @MyCursor 

    FETCH NEXT FROM @MyCursor INTO @SKU

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @ItemCursor = CURSOR FOR
            SELECT TOP 1 ItemId 
            FROM [dbo].[Item] 
            WHERE SKU = @SKU;

        CASE 
           WHEN @ItemCursor IS NOT NULL
              THEN UPDATE [dbo].OrderLine 
                   SET ItemId = @ItemCursor 
                   WHERE OrderLineId = @MyCursor.OrderLineId
        END

        FETCH NEXT FROM @MyCursor INTO @ItemId
    END; 

    CLOSE @MyCursor ;
    DEALLOCATE @MyCursor;
END

Пожалуйста, помогите мне и заранее спасибо.

1 Ответ

1 голос
/ 28 мая 2020

Мне кажется, просто нужен простой update:

update OL set
  ItemId = (
    SELECT TOP 1 I.ItemId 
    FROM dbo.Item I 
    WHERE I.SKU = OL.SKU
  )
FROM dbo.OrderLine OL
WHERE OL.ItemId IS NULL
...