我發現在下面的SQL和動態SQL中使用了一個遊標。配置文件帶來了相當多的執行計劃,我認爲它必須處理這個遊標。這是SQL的糟糕選擇嗎?存儲過程中的光標性能問題
SET @SelectStmtSubHeader = 'SELECT DISTINCT
dbo.dsb_testID(sh.GPCustomerID) AScursor -- RIGHT HERE
PONumber,
sh.GPCustomerID,
.....
我發現在下面的SQL和動態SQL中使用了一個遊標。配置文件帶來了相當多的執行計劃,我認爲它必須處理這個遊標。這是SQL的糟糕選擇嗎?存儲過程中的光標性能問題
SET @SelectStmtSubHeader = 'SELECT DISTINCT
dbo.dsb_testID(sh.GPCustomerID) AScursor -- RIGHT HERE
PONumber,
sh.GPCustomerID,
.....
一個很好的例子,這不是一個遊標的一個例子。
光標必須...
DECLARE this_is_a_cursor CURSOR
FOR
SELECT
stuff
FROM
a_query
還有你的文檔片斷代碼似乎使用標量函數來得到一個數值,它別名字cursor
。但是有一個名爲cursor
的字段不會使其成爲遊標。
如果設置邏輯中存在替代方法,則光標幾乎總是一個不好的選擇。
SQL基於設置的邏輯。它們並不意味着像集合一樣迭代。
SQL優化器通常非常適合尋找聰明的方式來檢索數據。遊標是一個相對簡單的工具。 ANSI SQL確實需要它,所以它通常是存在的。
這裏是從Sybase
+1從我搞清楚它不是一個遊標大聲笑。我回答了這個問題,你證明了這個問題沒有意義:p – Jordan 2012-01-10 23:44:15