游标更新声明变量错误

时间:2017-10-14 10:33:24

标签: sql sql-server sql-server-2008

我收到此错误。我想更新表中900个项目的200万条记录。

这是我的光标。

DECLARE @salesgroup varchar(10);
DECLARE @category varchar(10);
DECLARE @subcategory varchar(10);
DECLARE @itemname varchar(10);

DECLARE cursor1 CURSOR LOCAL FAST_FORWARD FOR 
     (SELECT salesgroup, category, subcategory, itemname 
      FROM poii);

OPEN cursor1;
FETCH NEXT FROM cursor1 INTO @salesgroup, @category, @subcategory, @itemname;

WHILE @@FETCH_STATUS = 0
BEGIN
    UPDATE MNB
    SET salesgroup = @salesgroup,
        category = @category,
        subcategory= @subcategory,
        @itemname = @itemname
    WHERE itemname = @itemname;

    FETCH NEXT FROM cursor1 INTO @salesgroup, @category, @subcategory, @itemname;
END

CLOSE cursor1;
DEALLOCATE cursor1     

enter image description here

2 个答案:

答案 0 :(得分:0)

不要使用光标。只需使用:

UPDATE MNB
    SET salesgroup = poli.salesgroup,
        category = poli.category,
        subcategory= poli.subcategory,
        itemname = poli.itemname
    FROM MNB JOIN
         poli
         ON MNB.itemname = poli.itemname;

学习在适当的地方使用基于集合的操作。如果您想练习使用游标,请将它们用于执行存储过程之类的操作。

答案 1 :(得分:0)

您的查询很好(语法)。你想尝试逐行运行吗?这不起作用,因为那样你就不再定义你的变量了。

此外,UPDATE MNB SET salesgroup = @salesgroup, category = @category, subcategory= @subcategory, @itemname = @itemname 应该做什么:

{{1}}