如果SQL Prompt發現使用EXECUTE,則會警告您,而無需指定存儲過程所在的架構,因為它可能導致執行時間變慢,甚至導致運行錯誤的過程。
通常,應通過在每個存儲過程,觸發器和動態執行的批處理的開始處添加SET NOCOUNT ON來防止發送行數消息。Phil Factor演示并解釋了細微差別和例外。
SQL Prompt可以幫助防止在數據庫代碼中積累技術債務。它會立即向團隊發出警報,警告可能無法阻止您的代碼按預期工作的問題,但最終可能導致性能,維護或安全性問題。
標量UDF作為全局數據庫常量的錯誤使用是一個主要的性能問題,每當SQL Prompt在任何生產代碼中發現此錯誤時,都應進行調查。除非您需要在計算列或約束中使用這些全局常量,否則通常將值存儲在內聯表值函數中或使用視圖會更安全,更方便。
Phil Factor解釋了在使用子查詢比較數據集時,為什么您更應該使用[NOT] EXISTS而不是[NOT] IN。盡管不再具有顯著的性能優勢,但是當子查詢的源數據包含NULL值時,使用NOT EXISTS可以避免出現意外結果。
SELECT…INTO是開發工作特別是創建臨時表的有用捷徑。但是,它不再具有明顯的性能優勢,應在生產代碼中避免使用。最好使用CREATE TABLE語句,在該語句中您可以預先指定約束和數據類型,這樣就可以減少不一致情況潛入數據的可能性。
在計算過程中,由于舍入誤差,使用MONEY和SMALLMONEY數據類型可能會導致意外的精度損失。通常最好使用DECIMAL(又名NUMERIC)類型。
Phil Factor演示了臨時表和表變量的用法,并提供了一些簡單的規則來確定表變量是否比臨時表(ST011)更好,反之亦然(ST012)。