除非我失去了一些重要的信息,這個查詢不應該被寫成光標。這是一個簡單的更新,應該寫這樣的事:
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