我有一个或多个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