Escape-Zeichen in SQL Server


92

Ich möchte ein Zitat mit Escapezeichen verwenden. Wie kann ich?

Ich habe einen Fehler in SQL Server erhalten

Nicht geschlossene Anführungszeichen nach der Zeichenfolge.

Ich schreibe eine SQL-Abfrage in eine varcharVariable, habe aber diesen Fehler erhalten:

Nicht geschlossene Anführungszeichen nach der Zeichenfolge.

Ich möchte ein Anführungszeichen als Escapezeichen verwenden.


4
Können Sie bitte zeigen uns die Abfrage ??
marc_s

Antworten:


71

Um zu entkommen, müssen 'Sie einfach vorher einen anderen setzen:''

Wie die zweite Antwort zeigt, ist es möglich, einem einfachen Anführungszeichen wie folgt zu entkommen:

select 'it''s escaped'

Ergebnis wird sein

it's escaped

Wenn Sie SQL zu einem auszuführenden VARCHAR verketten (dh dynamisches SQL), würde ich empfehlen, das SQL zu parametrisieren. Dies hat den Vorteil, dass Sie sich vor SQL-Injection schützen können. Außerdem müssen Sie sich keine Sorgen mehr machen, dass Sie solchen Anführungszeichen entkommen (was Sie tun, indem Sie die Anführungszeichen verdoppeln).

zB statt zu tun

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

Versuche dies:

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

29
Warum ist dies die akzeptierte Antwort? Es beantwortet die Frage nicht.
Peter Moore

3
@PeterMoore Entweder hätte das OP den ersten Teil meiner Antwort verwendet (Verdoppelung der Anführungszeichen gemäß den anderen Antworten unten), oder es hätte den bevorzugten Ansatz verwendet, den ich zum Erstellen einer SQL-Abfrage in einer Zeichenfolgenvariablen empfohlen habe - um parametrisiert zu verwenden SQL. In beiden
Fällen

Es beantwortet die Frage nicht. Manchmal benötigen Benutzer eine ODBC-Verbindung, was bedeutet, dass Sie nur reines SQL verwenden können.
Tony

Die bearbeitete Antwort auf mehr, es ist klarer und passt besser zur Frage
Revious

121

Sie können sich einem Zitat wie folgt entziehen:

select 'it''s escaped'

Ergebnis wird sein

it's escaped

Dies sollte die Antwort sein.
Tony

43

Sie können Ihr Escape-Zeichen definieren, aber nur mit einer LIKEKlausel verwenden.

Beispiel:

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

Hier wird %in der ganzen Zeichenfolge gesucht und so kann man den ESCAPEBezeichner in verwenden SQL Server.


21

Sie müssen nur ersetzen 'mit ''in Ihrem String

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

Sie können auch verwenden, REPLACE(@name, '''', '''''')wenn Sie SQL dynamisch generieren

Wenn Sie innerhalb einer like-Anweisung maskieren möchten, müssen Sie die ESCAPE-Syntax verwenden

Erwähnenswert ist auch, dass Sie sich für SQL-Injection-Angriffe offen lassen, wenn Sie dies nicht berücksichtigen. Weitere Informationen bei Google oder: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F


und doch haben Antworten von Dugokontov oder RichardPianka keine ähnlichen -1?
Seph

@MichaelMunsey probieren Sie es selbst aus: Gibt select 'den Fehler zurück Unclosed quotation mark after the character string ''. Nirgendwo in meiner Antwort verwende ich "nur zwei ', nicht sicher, warum meine die einzige Antwort mit Abstimmungen ist.
Seph

12

Austretende Zitate in MSSQL wird von einem doppelten Anführungszeichen gemacht, also ein ''oder ""produzieren ein entkam 'und "sind.


0

Sie können das **\**Zeichen vor dem Wert verwenden, dem Sie entkommen möchten, z insert into msglog(recipient) values('Mr. O\'riely') select * from msglog where recipient = 'Mr. O\'riely'


0

Wenn Sie Benutzereingaben in einer Variablen vermeiden möchten, können Sie dies wie folgt in SQL tun

  Set @userinput = replace(@userinput,'''','''''')

Der @userinput wird jetzt mit einem zusätzlichen einfachen Anführungszeichen für jedes Auftreten eines Anführungszeichens maskiert



-2

Um den Code leicht lesbar zu halten, können Sie []die Zeichenfolge mit eckigen Klammern in Anführungszeichen setzen 'oder umgekehrt.


Das ist falsch. Klammern arbeiten mit unzulässigen Zeichen in Feld-, Tabellen- oder Schemanamen.
Jamie Marshall

Ja, Sie haben Recht, es ist für die Objektnamen, nicht für den Inhalt von Zeichenfolgen. Ich muss die Frage falsch lesen.
Ben
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.