Saya ingin menggunakan kutipan dengan karakter pelarian. Bagaimana saya bisa melakukannya?
Saya telah menerima kesalahan di SQL Server
Tanda kutip tidak ditutup setelah string karakter.
Saya menulis kueri SQL dalam varchar
variabel tetapi saya telah menerima kesalahan itu:
Tanda kutip tidak ditutup setelah string karakter.
Saya ingin menggunakan tanda kutip sebagai karakter melarikan diri.
sql-server
escaping
char
esquare
sumber
sumber
Jawaban:
Untuk melarikan diri
'
Anda hanya perlu meletakkan yang lain sebelumnya:''
Seperti yang ditunjukkan oleh jawaban kedua, mungkin untuk menghindari kutipan tunggal seperti ini:
select 'it''s escaped'
hasilnya akan
Jika Anda menggabungkan SQL menjadi VARCHAR untuk dieksekusi (yaitu SQL dinamis), maka saya akan merekomendasikan parameterisasi SQL. Ini memiliki manfaat membantu menjaga terhadap injeksi SQL plus berarti Anda tidak perlu khawatir tentang keluar dari kutipan seperti ini (yang Anda lakukan dengan menggandakan tanda kutip).
misalnya daripada melakukan
DECLARE @SQL NVARCHAR(1000) SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA''' EXECUTE(@SQL)
coba ini:
DECLARE @SQL NVARCHAR(1000) SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1' EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'
sumber
Anda dapat menghindari kutipan seperti ini:
select 'it''s escaped'
hasilnya akan
sumber
Anda dapat menentukan karakter pelarian Anda, tetapi Anda hanya dapat menggunakannya dengan
LIKE
klausa.Contoh:
SELECT columns FROM table WHERE column LIKE '%\%%' ESCAPE '\'
Di sini ia akan mencari
%
seluruh string dan ini adalah bagaimana seseorang dapat menggunakanESCAPE
pengenal diSQL Server
.sumber
Anda hanya perlu mengganti
'
dengan''
inside string AndaSELECT colA, colB, colC FROM tableD WHERE colA = 'John''s Mobile'
Anda juga dapat menggunakan
REPLACE(@name, '''', '''''')
jika membuat SQL secara dinamisJika Anda ingin keluar di dalam pernyataan like maka Anda perlu menggunakan sintaks ESCAPE
Perlu juga disebutkan bahwa Anda membiarkan diri Anda terbuka terhadap serangan injeksi SQL jika Anda tidak mempertimbangkannya. Info lebih lanjut di Google atau: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F
sumber
select '
kembalikan kesalahanUnclosed quotation mark after the character string ''
. Tidak ada dalam jawaban saya yang saya gunakan"
hanya dua'
, tidak yakin mengapa jawaban saya adalah satu-satunya jawaban dengan suara rendah.Kutipan melarikan diri di MSSQL dilakukan dengan tanda kutip ganda, sehingga a
''
atau a""
akan menghasilkan satu lolos'
dan"
, masing-masing.sumber
Anda dapat menggunakan
**\**
karakter sebelum nilai yang ingin Anda hilangkan misalnyainsert into msglog(recipient) values('Mr. O\'riely')
select * from msglog where recipient = 'Mr. O\'riely'
sumber
Jika Anda ingin melepaskan input pengguna dalam variabel, Anda dapat melakukan seperti di bawah ini dalam SQL
Set @userinput = replace(@userinput,'''','''''')
@Userinput sekarang akan di-escape dengan satu kutipan ekstra untuk setiap kemunculan kutipan
sumber
WHERE username LIKE '%[_]d'; -- @Lasse solution WHERE username LIKE '%$_d' ESCAPE '$'; WHERE username LIKE '%^_d' ESCAPE '^';
DARI: SQL Server Escape an Underscore
sumber
Agar kode mudah dibaca, Anda dapat menggunakan tanda kurung siku
[]
untuk mengutip string yang berisi'
atau sebaliknya.sumber