我正在使用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' ;
答案 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 + ''';'