1

我有一个存在于链接服务器上的表,它有一个名为 name 的字段,我想在该字段上搜索一个名为 Macy's 的字符串。我将其作为动态 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).

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

任何想法和建议!

4

2 回答 2

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'

这不仅有助于避免混淆引号转义,而且还可以保护您免受 Sql Injection 攻击。

于 2012-11-08T22:22:42.017 回答
0

双引号会转义字符,因此您可以在字符串值中使用它。

exec('select *  from [dbo].[UsersTbl] where and  UserType = ''CLT'' ')
于 2016-03-11T06:30:57.093 回答