web-dev-qa-db-ja.com

SQL Serverのエスケープ文字

エスケープ文字付きの引用を使用したい。どのようにできるのか?

SQL Serverでエラーが発生しました

文字列の後の閉じられていない引用符。

私はvarchar変数でSQLクエリを書いていますが、そのエラーを受け取りました:

文字列の後の閉じられていない引用符。

エスケープ文字として引用符を使用したい。

前もって感謝します

70
esquare

SQLをVARCHARに連結して実行する場合(つまり、動的SQL)、SQLをパラメーター化することをお勧めします。これには、SQLインジェクションに対する保護に役立つという利点があります。また、このように引用符をエスケープすることを心配する必要がありません(引用符を2倍にすることで行います)。

例えばする代わりに

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA'''
EXECUTE(@SQL)

これを試して:

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'
57
AdaTheDev

次のように引用符をエスケープできます。

select 'it''s escaped'

結果は

it's escaped
91
dugokontov

エスケープ文字を定義できますが、LIKE句でのみ使用できます。

例:

SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'

ここでは、文字列全体で%を検索します。これが、SQL ServerESCAPE識別子を使用する方法です。

33
Aniket A

文字列内で'''に置き換えるだけです

SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'

SQLを動的に生成する場合は、REPLACE(@name, '''', '''''')も使用できます。

Likeステートメント内でエスケープする場合は、ESCAPE構文を使用する必要があります

また、SQLインジェクション攻撃を考慮しない場合は、SQLインジェクション攻撃にさらされていることに注意する必要があります。 Googleの詳細情報:または http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F

16
Seph

MSSQLでの引用符のエスケープは二重引用符で行われるため、''または""はそれぞれエスケープされた'"を生成します。

12
Richard Pianka

コードを読みやすくするために、角括弧[]を使用して、'を含む文字列を引用することができます。

0
Ben