如何用Like连接Where子句

时间:2017-07-29 13:32:25

标签: sql sql-server

我试图连接SET @WhereClause= @WhereClause + 'con.BusinessName LIKE ' + '%'+CONVERT(VARCHAR,@BusinessName) + '%' + ' AND ';这一行。

我希望得到这样的结果SET @WhereClause= con.BusinessName LIKE '%Hello%' AND ';

2 个答案:

答案 0 :(得分:1)

你应该真的使用参数。但是你需要单引号:

VARCHAR()

您还应该在SQL Server中指定@BusinessName的长度。默认值因上下文而异,调试问题可能非常困难。

注意:如果return it != map.end() ? it->second : std::optional<int32_t>{}; 只有一个引号,则会失败。想一想:参数。

答案 1 :(得分:0)

此外,您可以使用QUOTENAME函数(SQL Server 2008及更高版本):

SET @WhereClause = @WhereClause + 'con.BusinessName LIKE ' + QUOTENAME('%' + CONVERT(varchar(126), @BusinessName) + '%', '''') + ' AND ';

使用QUOTENAME函数,可以避免代码在@BusinessName包含单引号字符时中断,并消除SQL注入攻击的可能性(例如,如果@BusinessName获得它的值直接来自UI,通过Web应用程序/ API中的查询参数或请求体等。)

QUOTENAME用于在动态SQL中创建有效的分隔标识符,但可以在您的情况下使用它。

该函数接受nvarchar(128)作为输入字符串,如果@BusinessName超过126个字符(128减去两个%个字符),它将返回NULL。所以,你应该处理那个边缘情况。

相关问题