除非我失去了一些重要的信息,这个查询不应该被写成光标。这是一个简单的更新,应该写这样的事:
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;
这是一个游标的语法一个很好的资源:https://blog.sqlauthority.com/2007/01/01/sql-server-simple-example-of-cursor/amp/ – mendosi
你能请通过查看你的链接来帮助我查询... – Khokae
男人,请参阅@mendosi在这种情况下使用光标(在大多数情况下)的答案是一个矫枉过正的问题 – jean