我正在SQL Server環境中工作,沉重於存儲過程,其中很多過程使用0和''而不是Null來指示沒有傳遞有意義的參數值。什麼是與T-SQL中的空字符串進行比較的最快方法?
這些參數經常出現在WHERE子句中。通常的模式是一樣的東西
WHERE ISNULL(SomeField,'') =
CASE @SomeParameter
WHEN '' THEN ISNULL(SomeField,'')
ELSE @SomeParameter
END
出於各種原因,它是一個更容易做出改變,以一個進程比改變調用它的代碼。因此,如果調用代碼將空字符串傳遞給null參數,那麼與空字符串進行比較的最快方法是什麼?
我已經想到了一些方法:
@SomeParameter = ''
NULLIF(@SomeParameter,'') IS NULL
LEN(@SomeParameter) = 0
我也考慮在proc早期檢查參數,如果它等於「將它設置爲NULL」,只是做一個@SomeParameter IS NULL
測試在實際的WHERE子句中。
還有什麼其他方法?什麼是最快的?
非常感謝。
問:「我在一個SQL Server環境中工作,很多過程使用0和''而不是Null來指示沒有傳遞有意義的參數值。」A:這不是一件快樂的事情:)無論它值多少,我發現您的解決方法沒有任何問題。恕我直言... – paulsm4
這不是字符串比較,這是問題。這是計劃重用這些捕獲所有查詢。 'WHERE ISNULL(SomeField,'')'完全無法修改。參見[T-SQL中的動態搜索條件](http://www.sommarskog.se/dyn-search.html) –
@MartinSmith太棒了!感謝您的鏈接! –