SQL Server: вложенный курсор не отвечает - PullRequest
0 голосов
/ 26 июня 2018

У меня есть следующий курсор, пытающийся обновить записи в таблице для подготовки к экспорту в WooCommerce.Они являются переменными продуктами, поэтому стараются обновить все записи продуктов с помощью соответствующих списков атрибутов.Я делаю это один тип атрибута за раз.Когда я запускаю его, он попадает туда, где я пытаюсь создать строку значений атрибутов, и он зависает.Моя цель - циклически проходить через каждый продукт, а затем проходить через атрибуты этого продукта, чтобы создать строку.затем обновите запись и перейдите к следующему продукту.

DECLARE @id INT, @prodLoop INT, @attLoop INT
DECLARE @attrString char(8000)
DECLARE @getid CURSOR

SET @getid = CURSOR FOR
SELECT woo_export.prevProdID
FROM   woo_export
WHERE woo_export.prevProdID = 1174

OPEN @getid
FETCH NEXT
FROM @getid INTO @id

SET @prodLoop = @@FETCH_STATUS

WHILE @@FETCH_STATUS = 0

    BEGIN

--      CREATE CURSOR FOR ALL ATTRIBUTES
        DECLARE @attrName char(8000)
        DECLARE @getAtts CURSOR

        SET @getAtts = CURSOR FOR
        SELECT      o.optionDescription
        FROM        dbo.ProductOptionType t
                    INNER JOIN dbo.ProductOption o 
                        ON (t.optionTypeID = o.optionTypeID)
                    INNER JOIN dbo.ProductItem2Option oi 
                        ON (o.optionID = oi.optionID)
                    INNER JOIN dbo.ProductItem i 
                        ON (i.itemID = oi.itemID)
        WHERE       i.productID = @id
        AND     i.isActive = 1
        AND     t.optionTypeID = 1 


        OPEN @getAtts
        FETCH NEXT
        FROM @getAtts INTO @attrName

        WHILE @@FETCH_STATUS = 0

            BEGIN
--          CREATE STRING OF ATTRIBUTES

            SELECT @attrString = CONCAT(@attrString,', ', @attrName);

            FETCH NEXT
            FROM @getAtts INTO @attrName

            END

--      REMOVE INITIAL COMMA AND SPACE FROM STRING
        SELECT @attrString = SUBSTRING(@attrString, 3, LEN(@attrString)-2)

--      UPDATE WOO EXPORT PRODUCT WITH ATTRIBUTES WHERE THEY HAVE THIS ATTRIBUTE
        IF LEN(@attrString) > 0
            BEGIN

            UPDATE  woo_export 
            SET     attribute_1_name = 'Color', attribute_1_value = @attrString
            WHERE   prevProdID = @id

            END 

        SELECT @attrName = '';

        CLOSE @getAtts
        DEALLOCATE @getAtts

        FETCH NEXT
        FROM @getid INTO @id


    END

CLOSE @getid
DEALLOCATE @getid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...