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 インジェクション攻撃からも保護されます。

于 2012-11-08T22:22:42.017 に答える
0

引用符を二重にすると文字がエスケープされるため、文字列値の中で使用します。

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