【发布时间】:2014-09-21 13:41:22
【问题描述】:
我有以下用于搜索的 SQL 查询。
有一个@st 变量,它被分配了一个SQL 查询,最后我将执行该查询。问题是@st 变量被分配了一个字符串(即查询),并且在字符串内部有LIKE 表达式,例如:
address like '%edmon%'
这样就变成了:
set @st='select * from infoone where address like '%edmon%''
这会导致错误:
edmon 附近的语法不正确
完整的查询如下,
declare @v int;
declare @st varchar(1000);
set @st = 'select PLACEID, LEFT(CONVERT(NVARCHAR(1000), description), 500) as
des1, LOCATIONCITY, ADDRESS, DateT, RENT from infoone where ';
Select @v = count(address)
from infoone
where ((address like '%main%') OR (address like '%main street%')
OR (address like '%main street edmonton%'));
if @v>0
begin
set @st = @st + '(address like '%main%') OR
(address like '%main street%') OR
(address like '%main street edmonton%')' +
'and (';
end
else begin
execute(@st)
请告诉我我做错了什么以及如何解决它
谢谢
【问题讨论】:
-
任何匹配
LIKE '%main%'的东西也将匹配LIKE '%main street%'和LIKE '%main street edmonton%'- 那么为什么不直接说LIKE '%main%'呢? -
另外,计数是一个糟糕的主意——这意味着 SQL Server 必须对所有匹配的行进行计数。由于您只关心是否至少有一行,因此请像 M.Ali 的回答那样使用 EXISTS。
标签: sql sql-server-2008 tsql sql-server-2012 sql-like