我開始使用sql server 2008存儲過程中的第一次使用遊標。我已經做了一些初步的閱讀,並且我明白它們有顯着的性能限制。在我目前的情況下,我認爲他們是必要的(我想要爲符號表中的每個股票符號運行多個存儲過程。SQL服務器光標性能低下
編輯: 我會在每個符號上調用的sprocs大部分是插入操作來計算與符號相關的值,如5日均線,平均日均交易量,ATR(平均真實交易區間),其中大部分值將根據每日定價和交易量表中的數據計算出來......我想以簡化數據值的檢索,否則將被冗餘檢索......例如,我想爲每個符號獲取每日定價和批量數據到一個表變量中......然後將該臨時表傳遞給存儲過程調用我剛纔提到的每個聚合函數。希望這是有道理的...
因此,我最初的「外循環」基於光標的存儲過程在下面..它幾分鐘後超時,沒有返回任何東西到輸出窗口。
ALTER PROCEDURE dbo.sprocSymbolDependentAggsDriver2
AS
DECLARE @symbol nchar(10)
DECLARE symbolCursor CURSOR
STATIC FOR
SELECT Symbol FROM tblSymbolsMain ORDER BY Symbol
OPEN symbolCursor
FETCH NEXT FROM symbolCursor INTO @symbol
WHILE @@FETCH_STATUS = 0
SET @symbol = @symbol + ': Test.'
FETCH NEXT FROM symbolCursor INTO @symbol
CLOSE symbolCursor
DEALLOCATE symbolCursor
當我運行它沒有@symbol局部變量,並消除在while循環中的賦值,它似乎運行良好。是否明顯違反該作業中的績效最佳做法?謝謝..
你試圖運行的存儲過程是做什麼的? – 2012-02-15 16:49:36
@AbeMiessler我剛剛編輯我的帖子來描述內部sprocs,thx .. – StatsViaCsh 2012-02-15 21:01:26