我知道基於集合的解決方案是理想的,並且通常優於遊標。所以,請。通過放棄答案保存你的和我的時間「不要使用遊標,使用基於集合的操作」。我問這個,因爲我的谷歌搜索沒有給出任何答案和知識可能來自經驗:關於「模糊」遊標事實的問題
1)下次提取到V來去當我打開光標(FAST_FORWARD /靜態),是有區別在while循環內使用'取下一個'和'取下一個'之間?在性能上,記錄順序訪問等
2)ROW_NUMBER + SELECT/WHILE VS靜態遊標據我所知,靜態遊標創建具有選擇的數據臨時表和越過該臨時表。那麼,是否有理由使用select row_number() ..., ... from ... into ...
並用索引變量和select * from #tmp table where RowNumber = @IndexVar
迭代它?
3)FAST_FORWARD - 它可以分解嗎?如果我有一個fast_forward本地遊標,並且在這個遊標內插入/更新操作在遊標選擇的表上執行,是否有任何問題? (可能的週期等?)
4)計劃強迫有沒有辦法強制fast_forward光標使用靜態/動態計劃?
非常感謝你對你的答案
PS:對於那些你真的很好奇,是的,這個問題可以改寫成一個基於集合的方法,但由於從更高了,新行一些決定在主表中創建必須使用存儲過程創建/插入。
如何讓存儲過程阻止您使用基於集合的方法?存儲過程可以寫成使用基於集合的代碼。 – HLGEM
這看起來像一個多個問題。也許考慮把你的每一個數字分解成一個單獨的問題? –
@HLGEM:如果您的意思是執行一個存儲過程,其中存儲過程執行基於集合的插入/更新...否。爲什麼? 1st)現在它是一個存儲過程,它通過一個遊標並創建一個存儲過程。讓我們稱之爲CreateUpdateRecord。這個過程只創建/更新一個和一個記錄,你可以把它看作是一個像C#這樣的標準語言的構造器/設置器。這是在我加入該項目之前完成的,現在我無法做任何事情。在被問及時,這是一個很難改變的難題。我唯一的選擇是儘可能快地執行它450 000。 –