Karakter Escape di SQL Server


95

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 varcharvariabel tetapi saya telah menerima kesalahan itu:

Tanda kutip tidak ditutup setelah string karakter.

Saya ingin menggunakan tanda kutip sebagai karakter melarikan diri.


4
Bisakah Anda menunjukkan pertanyaannya kepada kami ??
marc_s

Jawaban:


79

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

it's escaped

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'

30
Mengapa ini jawaban yang diterima? Itu tidak menjawab pertanyaan itu.
Peter Moore

3
@PeterMoore Entah OP akan menggunakan bagian pertama dari jawaban saya (menggandakan tanda kutip, sesuai jawaban lain di bawah), atau akan menggunakan pendekatan pilihan yang saya rekomendasikan untuk membangun kueri SQL dalam variabel string - untuk menggunakan parameterized SQL. Apa pun itu, keduanya adalah jawaban atas pertanyaan
AdaTheDev

Itu tidak menjawab pertanyaan itu. Terkadang pengguna membutuhkan koneksi ODBC yang berarti Anda hanya dapat menggunakan SQL murni.
Tony

Jawaban yang diedit untuk lebih jelas dan lebih sesuai dengan pertanyaan
Revious

123

Anda dapat menghindari kutipan seperti ini:

select 'it''s escaped'

hasilnya akan

it's escaped

Ini harus menjadi jawabannya.
Tony

46

Anda dapat menentukan karakter pelarian Anda, tetapi Anda hanya dapat menggunakannya dengan LIKEklausa.

Contoh:

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

Di sini ia akan mencari %seluruh string dan ini adalah bagaimana seseorang dapat menggunakan ESCAPEpengenal di SQL Server.


21

Anda hanya perlu mengganti 'dengan ''inside string Anda

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

Anda juga dapat menggunakan REPLACE(@name, '''', '''''')jika membuat SQL secara dinamis

Jika 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


namun jawaban oleh dugokontov atau RichardPianka tidak memiliki kesamaan -1?
Seph

@MichaelMunsey mencobanya sendiri: select 'kembalikan kesalahan Unclosed 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.
Seph

12

Kutipan melarikan diri di MSSQL dilakukan dengan tanda kutip ganda, sehingga a ''atau a ""akan menghasilkan satu lolos 'dan ", masing-masing.


0

Anda dapat menggunakan **\**karakter sebelum nilai yang ingin Anda hilangkan misalnya insert into msglog(recipient) values('Mr. O\'riely') select * from msglog where recipient = 'Mr. O\'riely'


0

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



-2

Agar kode mudah dibaca, Anda dapat menggunakan tanda kurung siku []untuk mengutip string yang berisi 'atau sebaliknya.


Ini salah Tanda kurung bekerja pada karakter ilegal di bidang, tabel, atau nama skema.
Jamie Marshall

Ya, Anda benar, ini untuk nama objek, bukan konten string. Saya harus salah membaca pertanyaan.
Ben
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.