我使用SQL Server構建的存儲過程,而我使用的遊標遍歷如何訪問遊標列沒有FETCH .. INTO
我定義光標如下select語句:
DECLARE @c_col1 varchar(max);
DECLARE @c_col2 varchar(max);
DECLARE c as CURSOR FOR
SELECT col1, col2
FROM table;
OPEN c;
FETCH NEXT FROM c INTO
@c_col1, @c_col2;
SELECT @c_col1, @c_col2;
有沒有辦法訪問遊標的列而不需要爲每列聲明變量並在FETCH子句中使用INTO?換句話說,是有可能使用:
DECLARE c as CURSOR FOR
SELECT col1, col2
FROM table;
OPEN c;
FETCH NEXT FROM c;
SELECT c.col1, c.col2;
爲什麼你需要使用遊標?您應該嘗試使用SQL來找到基於集合的替代方案,因爲這是數據庫擅長處理的方式。遊標代碼通常比等效的SQL慢得多。 – pjp 2009-08-19 08:27:22
@pjp,有時遊標對於逐行運行一些複雜的邏輯非常有用,通常通過爲返回的每一行調用存儲過程。另外,如果您需要執行諸如刪除幾百萬行之類的操作,則一個基於集合的查詢可能會長時間鎖定您的數據庫。一次用光標刪除一行需要更長的時間,但允許數據庫在發生時進行呼吸。 – 2009-08-19 10:11:10
您可以循環和處理數據,無需光標。使用基於集合的操作可以大幅提高性能,取代遊標。但是,我已經替換了遊標的使用,但仍然是循環的(因爲它確實是必要的),並且仍然有很大的性能提升。 – 2009-08-19 11:52:32