我有一個或多個OR內部的一個AND在Where子句中的查詢,我試圖用CASE WHEN來替換它們以查看它是否改進了性能。CASE當在與LIKE條件而不是1的情況下
的存儲過程中的SELECT查詢語句是這樣的:
DECLARE @word = '%word%' --These are inputs
DECLARE @type = 'type'
SELECT * FROM table1
WHERE SomeCondition1
AND ((@type = 'CS' AND col1 like @word)
OR
(@type = 'ED' AND col2 like @word)
....
)
我想寫這個查詢爲:
SELECT * FROM table1
WHERE SomeCondition1
AND (1= CASE WHEN @type = 'CS'
THEN col1 like @word
WHEN @type = 'ED'
THEN col2 like @word
END)
但SQL 2012提供了錯誤「附近有語法錯誤一樣'爲THEN col1 like @word
。如果我將THEN col1 like @word
替換爲1
,那麼沒有任何抱怨,但LIKE應該返回0或1。
我試過SELECT (col1 like @word)
,額外()
等沒有成功。
有沒有一種辦法,包括在CASE WHEN
LIKE
在WHERE
或者我應該只是如果使用CASE WHEN
代替了原來的IF的不會讓任何性能上的差異不煩?
UPDATE:
這其實並沒有什麼區別表現明智的。
謝謝,我會看看你給的信息,但因爲我需要做的'COL1 LIKE @ word'而不是你的樣品不會爲我工作'@ LIKE col1'。但我找到了一種方法來讓它工作,我現在要發佈。 – artm 2014-10-22 02:12:07
我的錯誤...我會扭轉它。 – 2014-10-22 02:16:07