Sql-Server

什麼時候程序查詢是絕對必要的?

  • May 8, 2020

我知道我們傾向於不惜一切代價避免在 SQL Server 中使用游標和循環,但是在哪些情況下您絕對需要過程查詢,而基於集合的查詢不會給您結果?

我了解兩者之間的區別,我只是從未遇到過需要使用游標的情況。我想知道是否有這種情況。

根據我的經驗,我遇到過幾次需要程序/迭代方法的情況。

API 只允許單行操作

如果我想以程式方式將具有 500 個錯誤類型列的表中的數據類型從實數更改為十進制,就像這個SO 問題所問的那樣,游標是一種很好的方法,因為 DDL 不允許在單個語句中更改多個列。

基於集合不擴展

如果你有SQL Server MVP Deep Dives一書, Hugo Kornelis的第 4 章“基於集合的迭代:第三種選擇”有一些很好的基於游標/集合的操作的案例。本章作者引用的兩個經典問題是Running TotalsBin Packing

對於我在上一份工作中繼承的設計不佳的流程,我使用了基於集合的迭代方法並取得了很好的成功。簡而言之,有一個過程每年必須更新 50-75M 行,並且嘗試在一個集合中這樣做會破壞我們的日誌。通過將更新分塊為 N 行的更小批次,它允許日誌跟上並實際上比前一年分配的磁碟空間多一公噸時更快地完成。

引用自:https://dba.stackexchange.com/questions/4610