在一个名为@name的存储过程中有一个参数。如果该参数的长度为1,则需要搜索单列(LastName
),否则需要搜索两列(FirstName
&LastName
)需要搜索。
这是我到目前为止写的-
WHERE
p.Year = @year
AND
(CASE WHEN LEN(@name) = 1 THEN (p.LastName LIKE @name + '%')
ELSE (p.LastName LIKE @name + '%' OR p.FirstName LIKE @name + '%')
END)
它给了我这个错误
关键字'like'附近语法错误。'
我如何做到这一点?
你可以做
WHERE p.Year = @year
AND (
/*Always look at this*/
p.LastName LIKE @name + '%'
/*Only need to take account of FirstName if len(@name) <> 1 */
OR ( len(@name) <> 1 AND p.FirstName LIKE @name + '%' )
)
但是将其分解为两个单独的查询和IF ... ELSE
条件逻辑可能会给您一个更好的计划,而不是尝试对两种情况进行一次捕获所有查询。
也许使用IF…如上面所建议的那样?
IF len(@name) = 1
SELECT *
FROM test p
WHERE p.Year = @year
AND p.LastName LIKE @name + '%'
ELSE
SELECT *
FROM test p
WHERE p.Year = @year
AND ( p.LastName LIKE @name + '%'
OR p.FirstName LIKE @name + '%' )