我想更新一个包含200万行的表。我想更新该表中的三列,以获取来自表POII的特定项目名称,其中包含800行和3列。
我需要在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.salesgroup, category= i.category ,subcategory =i.subcategory where itemname = i.itemname;
Commit;
答案 0 :(得分:2)
除非我遗漏了一些重要信息,否则不应将此查询写为游标。这是一个简单的更新,应该写成这样的:
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;