我在名为@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'附近的语法不正确。
我如何做到这一点?
答案 0 :(得分:2)
你可以做到
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
条件逻辑可能会给你一个更好的计划,而不是在两个案例中尝试一个捕获所有查询。
答案 1 :(得分:2)
如上所述,或许使用IF ... ELSE?
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 + '%' )