SQL Server 2012:SELECT 查詢中的行順序變更
SQL Server 2012 顯著改變了缺乏明確 SELECT
子句的 ORDER BY
語句中處理行順序的方式。 與它的前身 SQL Server 2008 不同,SQL Server 2012 不提供此類保證。 如果沒有 ORDER BY
子句,回傳行的順序將變得不可預測。
對現有應用程式的影響
此變更直接影響依賴一致行排序的應用程式。 例如,跨 5 個資料庫的 2500 多個預存程序需要更新才能維持可預測的結果。
解
1。 實作 ORDER BY
子句:
建議的解決方案是為所有受影響的預存程序新增適當的 ORDER BY
子句。 雖然勞動密集型,但這保證了一致的行順序並防止意外的查詢結果。
2。 降級(不建議):
還原到 SQL Server 2008 將還原先前的隱式排序。然而,由於涉及的複雜性和潛在的支持問題,強烈建議不要這樣做。
SQL、集合論與行順序
SQL 固有的行順序缺乏源自於其集合論基礎。 根據定義,集合沒有固有的順序。 因此,SQL 結果集中的行順序從根本上來說是任意的。
SQL Server 的歷史行為和當前最佳實踐
雖然先前的 SQL Server 版本有時會隱含順序,但這沒有記錄且不可靠。 許多部落格文章和專家建議都警告不要依賴這種隱式行為。 查詢優化器團隊已明確建議不要這樣做。
結論
SQL Server 2012 中行順序行為的轉變需要在所有需要可預測行排序的應用程式中使用 ORDER BY
子句。 雖然需要付出巨大的努力,但這對於資料完整性和一致的查詢結果至關重要。
以上是SQL Server 2012升級如何影響不含ORDER BY的SELECT查詢中的行順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!