我想选择包含@selctDescription
参数内容的记录,但仅当@selctDescription
不为空时。
我有以下内容,但不起作用:
(t.[description] LIKE
(
CASE
WHEN @selctDescription = '' THEN t.[description]
ELSE ('%' @selctDescription '%')
END
)
)
有人能指出我正确的方向吗?
答案 0 :(得分:4)
SELECT *
FROM Table
WHERE
((@selctDescription IS NULL OR @selctDescription = '')
OR
(t.[description] LIKE '%' + @selctDescription +'%'))
答案 1 :(得分:2)
@selctDescription = '' OR t.[description] LIKE '%' + @selctDescription + '%'
答案 2 :(得分:2)
我认为您的代码相当于:
t.[description] LIKE '%' + @selctDescription + '%'
另一方面,你的描述表明你想要这个:
@selctDescription <> ''
AND t.[description] LIKE '%' + @selctDescription + '%'
答案 3 :(得分:2)
对你有几点想法......
如果你有'%' @selctDescription '%'
,你只需要在字符串之间+
来连接它们。您的代码将按原样运行。
'%' + @selctDescription + '%'
此外,注意您甚至不需要CASE
语句是有用的,因为当参数为空时,您会得到'%%'
,这仍将匹配所有内容。
这很有用,因为目前在LIKE
语句的两侧都有表字段。这真的会伤害优化者。如果我使用CASE,我会更倾向于坚持......
t.[description] LIKE (CASE WHEN @selctDescription = '' THEN '%' ELSE ('%' + @selctDescription + '%') END)
这样做的好处是CASE语句的结果可以在执行查询之前作为标量值执行一次。而不是重新计算行。
然后说,它在功能上与...相同......
t.[description] LIKE ('%' + @selctDescription + '%')
答案 4 :(得分:1)
根据您的第一行和评论,您需要进行以下选择:
Select * from table
where field <> ''
and field like '%' + @selctDescription + '%'
但是你必须放置正确的表和字段,而@selctDesciption必须是文本(char,nchar,varchar,nvarchar,...)。