【发布时间】:2014-12-17 09:53:16
【问题描述】:
我在 where 子句的 AND 中有一堆 OR 的查询,我试图用 CASE WHEN 替换它们,看看它是否能提高性能。
存储过程中的选择查询是这样的:
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 提供了错误“Incorrect Syntax Near Like”。如果我将THEN col1 like @word 替换为1,则不会有任何抱怨,但 LIKE 无论如何都应该返回 0 或 1。
我尝试了SELECT (col1 like @word)、额外的()等,但没有成功。
有没有办法将LIKE 包含在CASE WHEN 和WHERE 中,或者如果使用CASE WHEN 而不是原来的IF 不会产生任何性能差异,我应该不打扰?
更新:
这实际上对性能没有任何影响。
【问题讨论】:
标签: sql sql-server performance tsql stored-procedures