繁体   English   中英

在SQL中使用带有LIKE关键字的参数

[英]using parameter in SQL with LIKE keyword

从我的C#程序,我访问一个SQL Server 2008数据库。 我有一个带有全文索引的表,想搜索一个索引条目:

SELECT page_id FROM page_categories WHERE page_title LIKE @title

当'title'没有空格时,一切都很好,但是当title确实包含空格时,请求失败。 它不会引发任何错误,但是返回的记录集已关闭

command.ChangeParameter("title", title);

using (System.Data.IDataReader reader = command.ExecuteQuery())
{
  while (reader.Read())
    resultSet.Add(reader.GetInt32(0));

  reader.Close();
}

我不能用''括住@title参数,因为命令对象会将@title解释为字符串而不是参数。

SELECT page_id FROM page_categories WHERE page_title LIKE '@title'

有人知道标题参数可以包含空格时如何将参数用于LIKE请求吗?

预先感谢,弗兰克

你可以这样做:

SELECT page_id 
FROM page_categories 
WHERE page_title LIKE '%' + @title + '%'

除了ck的答案,您可以执行以下操作:

command.ChangeParameter("title", "%"+title.Trim()+"%");

您不使用LIKE搜索自由文本索引。 您使用CONTAINS或FREETEXT或类似内容。

SELECT page_id 
FROM page_categories 
WHERE page_title LIKE '%' + @title + '%'

%表示通配符,类似于SQL之外更常见的* (零个或多个字符的任何字符串)。

您应确保在调用代码中通过.Trim()修剪参数。

是可能的通配符的完整参考。

我将单引号添加到查询中:

SELECT page_id FROM page_categories WHERE page_title LIKE '' + @title + ''

如果我尝试使用'Contains'(CONTAINS(page_title,``+ @tile +''))尝试此操作,则会收到语法错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM