У меня есть следующий курсор, пытающийся обновить записи в таблице для подготовки к экспорту в 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