SQL SERVER如何转义特殊字符

Sai*_*and 1 sql-server-2008

我有一个存在于链接服务器上的表,它有一个名为name的字段,我想在该字段上搜索名为Macy的字符串.我正在执行它作为动态SQL: -

declare @Sql nvarchar(2000)
declare @searchName nvarchar(255)

SET @searchName = N'macy''s'
SET @sql = 'SELECT * from crm_opportunity o where o.NAME LIKE ''% ' + @searchName + '%'' ESCAPE '''''' '
exec (@sql).
Run Code Online (Sandbox Code Playgroud)

换句话说,我试图逃避单引号.我得到错误消息102,级别15,状态1,行1's'附近的语法不正确.

任何想法和建议!

Mic*_*son 5

而不是使用EXEC,使用sp_executesql和参数化您的查询:

execute sp_executesql 
    N'SELECT * from crm_opportunity o where o.NAME LIKE ''%'' +  @searchName + ''%''',
    N'@searchName  nvarchar(255)',
    @searchName = N'macy''s'
Run Code Online (Sandbox Code Playgroud)

这不仅有助于避免混淆报价转义,还可以保护您免受Sql Injection攻击.