如果SQL Prompt發(fā)現(xiàn)使用EXECUTE,則會警告您,而無需指定存儲過程所在的架構(gòu),因?yàn)樗赡軐?dǎo)致執(zhí)行時間變慢,甚至導(dǎo)致運(yùn)行錯誤的過程。
使用舊式聯(lián)接語法沒有任何優(yōu)勢。如果SQL提示標(biāo)識了它在舊版代碼中的使用,則重寫語句以使用ANSI標(biāo)準(zhǔn)的連接語法將簡化和改進(jìn)代碼。
通常,應(yīng)通過在每個存儲過程,觸發(fā)器和動態(tài)執(zhí)行的批處理的開始處添加SET NOCOUNT ON來防止發(fā)送行數(shù)消息。Phil Factor演示并解釋了細(xì)微差別和例外。
SQL Prompt可以幫助防止在數(shù)據(jù)庫代碼中積累技術(shù)債務(wù)。它會立即向團(tuán)隊(duì)發(fā)出警報(bào),警告可能無法阻止您的代碼按預(yù)期工作的問題,但最終可能導(dǎo)致性能,維護(hù)或安全性問題。
標(biāo)量UDF作為全局?jǐn)?shù)據(jù)庫常量的錯誤使用是一個主要的性能問題,每當(dāng)SQL Prompt在任何生產(chǎn)代碼中發(fā)現(xiàn)此錯誤時,都應(yīng)進(jìn)行調(diào)查。除非您需要在計(jì)算列或約束中使用這些全局常量,否則通常將值存儲在內(nèi)聯(lián)表值函數(shù)中或使用視圖會更安全,更方便。
Phil Factor解釋了在使用子查詢比較數(shù)據(jù)集時,為什么您更應(yīng)該使用[NOT] EXISTS而不是[NOT] IN。盡管不再具有顯著的性能優(yōu)勢,但是當(dāng)子查詢的源數(shù)據(jù)包含NULL值時,使用NOT EXISTS可以避免出現(xiàn)意外結(jié)果。
通過代碼分析規(guī)則,格式設(shè)置樣式和代碼片段,開發(fā)團(tuán)隊(duì)如何使用SQL Prompt建立和共享編碼標(biāo)準(zhǔn)的戰(zhàn)略視圖。
SELECT…INTO是開發(fā)工作特別是創(chuàng)建臨時表的有用捷徑。但是,它不再具有明顯的性能優(yōu)勢,應(yīng)在生產(chǎn)代碼中避免使用。最好使用CREATE TABLE語句,在該語句中您可以預(yù)先指定約束和數(shù)據(jù)類型,這樣就可以減少不一致情況潛入數(shù)據(jù)的可能性。
在計(jì)算過程中,由于舍入誤差,使用MONEY和SMALLMONEY數(shù)據(jù)類型可能會導(dǎo)致意外的精度損失。通常最好使用DECIMAL(又名NUMERIC)類型。
Phil Factor演示了臨時表和表變量的用法,并提供了一些簡單的規(guī)則來確定表變量是否比臨時表(ST011)更好,反之亦然(ST012)。