我试图连接SET @WhereClause= @WhereClause + 'con.BusinessName LIKE ' + '%'+CONVERT(VARCHAR,@BusinessName) + '%' + ' AND ';
这一行。
我希望得到这样的结果SET @WhereClause= con.BusinessName LIKE '%Hello%' AND ';
答案 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
。所以,你应该处理那个边缘情况。