sql server中的循环更新游标
我想更新一个包含200万行的表。我想为一个特定的项目名称更新该表中的三列,该项目名称来自包含800行和3列的表POII 我需要在SQL Server 2014中为此编写一个游标 我该怎么写呢?它给出了一个语法错误 有200万条记录的表是MNBsql server中的循环更新游标,sql,sql-server-2014,Sql,Sql Server 2014,我想更新一个包含200万行的表。我想为一个特定的项目名称更新该表中的三列,该项目名称来自包含800行和3列的表POII 我需要在SQL Server 2014中为此编写一个游标 我该怎么写呢?它给出了一个语法错误 有200万条记录的表是MNB DECLARE cursor1 CURSOR FOR Select * from poii ; OPEN c1; Begin while i in cursor1 loop Update MNB set salesgroup=i.sales
DECLARE cursor1 CURSOR FOR
Select * from poii ;
OPEN c1;
Begin
while i in cursor1 loop
Update MNB set salesgroup=i.salesgroup, category= i.category ,subcategory =i.subcategory where itemname = i.itemname;
Commit;
除非我遗漏了一些关键信息,否则不应将此查询编写为游标。这是一个简单的更新,应该这样写:
UPDATE MNB
SET salesgroup = i.salesgroup,
category = i.category,
subcategory = i.subcategory
FROM MNB
JOIN poii ON MNB.itemname = poii.itemname;
这种更新应该比游标更高效、更快
光标应该是这样写的。请注意,必须声明变量以保存游标当前行中的值,并且需要获取每一行。不要忘记关闭并释放光标
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,
...
WHERE itemname = @itemname;
FETCH NEXT FROM cursor1 INTO @salesgroup, @category, @subcategory, @itemname;
END
CLOSE cursor1;
DEALLOCATE cursor1;
这是一个很好的游标语法资源:你能通过你的链接帮我查询一下吗…伙计,在这种情况下,请看@mendosi answer使用游标,在大多数情况下是一个过度使用。你不应该为此使用游标。停止使用印度单词。我已经解决了您的问题一次.,,非常感谢您使用Update命令,但当我在sql server上启动游标时,会发生此错误。。Msg 137,级别15,状态2,第9行必须在rate salesgroup声明标量变量。当我在rate salesgroup,rate类别,rate子类别,rate itemname执行row FETCH NEXT FROM cursor1时,会发生此错误;