我經常遇到在那裏我可以寫一個T-SQL查詢這樣的條件的情況下...CASE或AND/OR在哪裏條件。最佳做法是什麼?
DECLARE @FirstName NVARCHAR(500)
SET @FirstName ='Joe'
SELECT *
FROM dbo.Customers c
WHERE
CASE
WHEN @FirstName <> '' THEN
CASE WHEN c.FirstName= @FirstName THEN 1 ELSE 0 END
ELSE 1
END = 1
或者這樣......
SELECT *
FROM dbo.Customers c
WHERE
(@FirstName = '' OR (@FirstName <> '' AND c.FirstName = @FirstName))
它們都可以產生相同的結果和兩個查詢計劃似乎都是相同的。
所以我很好奇哪一個是最好的做法,或者如果有一個比另一個有任何陷阱?
最佳做法是解決客戶問題,而不是擔心同樣有效的SQL語法 – Andomar 2012-07-30 15:43:16
首先擔心清楚地表達邏輯的意圖。 – HABO 2012-07-30 15:56:54
最佳做法是不使用。或者可能是第二個與「OPTION(RECOMPILE)」一起使用的。即使在查找特定值時,也不會在'c.FirstName'上使用索引。參見[T-SQL中的動態搜索條件](http://www.sommarskog.se/dyn-search.html)和[Catch-all queries](http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries /)的一些文章。 – 2012-07-30 16:16:14