エスケープ文字付きの引用を使用したい。どのようにできるのか?
SQL Serverでエラーを受け取りました
文字列の後の閉じられていない引用符。
varchar
変数にSQLクエリを書いていますが、そのエラーを受け取りました:
文字列の後の閉じられていない引用符。
引用符をエスケープ文字として使用したい。
エスケープ文字付きの引用を使用したい。どのようにできるのか?
SQL Serverでエラーを受け取りました
文字列の後の閉じられていない引用符。
varchar
変数にSQLクエリを書いていますが、そのエラーを受け取りました:
文字列の後の閉じられていない引用符。
引用符をエスケープ文字として使用したい。
回答:
脱出'
するには、前に別のものを置く必要があります。''
2番目の答えが示すように、次のように単一引用符をエスケープすることが可能です。
select 'it''s escaped'
結果は
it's escaped
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'
あなただけ交換する必要がある'
と''
あなたの文字列の内部
SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'
REPLACE(@name, '''', '''''')
SQLを動的に生成する場合にも使用できます
likeステートメント内でエスケープする場合は、ESCAPE構文を使用する必要があります
また、SQLインジェクション攻撃を考慮しない場合は、SQLインジェクション攻撃にさらされていることにも触れておく価値があります。Googleの詳細またはhttp://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F
select '
くださいUnclosed quotation mark after the character string ''
。エラーを返します。私の回答のどこにも"
2つしか使用して'
いません。なぜ私が反対票を投じた唯一の回答であるかはわかりません。
**\**
エスケープしたい値の前の文字を
使用できます。insert into msglog(recipient) values('Mr. O\'riely')
select * from msglog where recipient = 'Mr. O\'riely'
WHERE username LIKE '%[_]d'; -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
コードを読みやすくするために、角かっこ[]
を使用して文字列を引用符で囲んだり、'
その逆を行うことができます。