SQL使用LIKE结合变量查询无结果问题求助
问题原因分析
你遇到的问题核心是变量使用方式错误:
- 你把包含OR/AND逻辑的条件字符串赋值给
@search后,直接用在book_text like @search里,此时SQL会把@search的整个内容当成LIKE的匹配模式——也就是它会去查找book_text字段里包含'%fishing%' or book_text like '%seaside%' and book_text like '%docks%'这段完整文本的记录,而非解析执行你写的OR/AND逻辑判断,自然查不到结果。 - 手动编写的第二条语句中,SQL会正确解析OR和AND的逻辑关系,因此能返回正确结果。
解决方案
要实现动态拼接逻辑条件的需求,需要使用动态SQL执行拼接后的查询语句,示例如下:
set @search = 'book_text like ''%fishing%'' OR book_text like ''%seaside%'' AND book_text like ''%docks%''' -- 推荐用sp_executesql执行(更安全,支持参数化) declare @sql nvarchar(max) set @sql = 'select * from constituency where ' + @search exec sp_executesql @sql -- 简单场景也可以用EXEC exec('select * from constituency where ' + @search)
注意:使用动态SQL时需警惕SQL注入风险,如果@search的内容来自用户输入,务必做参数化处理或严格校验。
内容的提问来源于stack exchange,提问作者richieb
相关产品推荐
相关产品推荐

