在WHERE子句中添加LIKE运算符(动态SQL)

时间:2016-10-07 15:40:00

标签: sql sql-server where-clause dynamic-sql sql-like

我正在使用Dynamic SQL创建一个将要执行的'SELECT'SQL语句。在我正在创建的SQL语句中,我想使用'LIKE'运算符,但因为它使用了引号'',它与'SELECT'语句开头使用的引号相冲突。

SET @sql = 'SELECT * FROM LogTable WHERE Application LIKE ' + @ApplicationName + ' ;'

假设'@ApplicationName = TestApp',上面的动态SQL'@sql'变量将生成以下SQL语句:

SELECT * FROM LogTable WHERE Application LIKE TestApp ;

这会导致错误,因为“TestApp”周围不存在引号。如何在动态SQL中创建引号,允许使用“LIKE”运算符?如何创建下面的SQL语句:

SELECT * FROM LogTable WHERE Application LIKE 'TestApp' ;

2 个答案:

答案 0 :(得分:6)

我将使用SP_EXECUTESQL,其中您不想担心单引号

Declare  @sql NVARCHAR(max)

SET @sql = 'SELECT * FROM LogTable WHERE Application LIKE  @ApplicationName ;'

EXEC Sp_executesql
  @sql,
  N'@ApplicationName varchar(100)',
  @ApplicationName = @ApplicationName 

这也避免了 SQL注入

答案 1 :(得分:-1)

您需要自己将引号添加到SQL中。您可以通过使用其中两个来逃避单引号:

SET @sql = 
    'SELECT * FROM LogTable WHERE Application LIKE ''' + @ApplicationName + ''';'