Sql-Server
如果存在 - 選擇防止重複程式碼
我們收到一個訂單列表,並驗證它以某些前綴開頭,例如,如果 OrderNumber 不以 ABC 開頭,則將訂單列表顯示為錯誤給使用者。我們使用exists,來搜尋第一個存在,不想消耗太多的性能時間。如果不存在,那麼我們可以開始在程式碼中執行其他任務。
sql中是否有擺脫重複程式碼的方法?我們在多個表上進行了許多這樣的檢查,試圖讓程式碼更有效率。
if exists ( select * from dbo.OrdersImport where left(OrderNumber,3) <> 'ABC' ) begin select OrderNumber as OrderErrorList from dbo.OrdersImport where left(OrderNumber,3) <> 'ABC' end else
不幸的是,我擔心通過嘗試防止重複程式碼,您最終可能會編寫更多程式碼並使查詢的可讀性降低。但我相信這對你來說是有利的——考慮到在測試中你只需要在一個或兩個表中搜尋的情況,為了檢索所有的細節你必須加入更多的表。在這些情況下,您可以簡化測試查詢,從而使它們更快地執行。
在我們這樣做的同時,您也可以考慮更改您的 WHERE 語句。在謂詞中使用函式會使它們不是 SARGable 並阻止在這些情況下使用索引。此範例中更好的方法是檢查
WHERE OrderNumber LIKE 'ABC%'
因為優化器將執行轉換為類似於以下內容的內容
OrderNumber >= 'ABC' AND OrderNumber < 'ABD'
它支持使用索引。所以這將是索引掃描(使用left())與索引搜尋(使用LIKE)。