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