Ich versuche zu insert
einige Textdaten in eine Tabelle in SQL Server
9.
Der Text enthält ein einfaches Anführungszeichen (').
Wie entkomme ich dem?
Ich habe versucht, zwei einfache Anführungszeichen zu verwenden, aber es gab mir einige Fehler.
z.B. insert into my_table values('hi, my name''s tim.');
sql
sql-server
tsql
delimiter
single-quotes
tim_wonil
quelle
quelle
Antworten:
Einfache Anführungszeichen werden durch Verdoppeln vermieden , so wie Sie es uns in Ihrem Beispiel gezeigt haben. Das folgende SQL veranschaulicht diese Funktionalität. Ich habe es auf SQL Server 2008 getestet:
Ergebnisse
quelle
Wenn es für Sie nicht funktioniert, Ihrem einfachen Anführungszeichen mit einem anderen einfachen Anführungszeichen zu entkommen (wie bei einer meiner letzten
REPLACE()
Abfragen), können Sie esSET QUOTED_IDENTIFIER OFF
vor Ihrer Abfrage und dannSET QUOTED_IDENTIFIER ON
nach Ihrer Abfrage verwenden.Zum Beispiel
quelle
Wie wäre es mit:
quelle
Die Verdoppelung des Zitats hätte funktionieren sollen, daher ist es merkwürdig, dass es bei Ihnen nicht funktioniert hat. Eine Alternative ist jedoch die Verwendung von doppelten Anführungszeichen anstelle von einfachen Zeichen um die Zeichenfolge. Dh
insert into my_table values("hi, my name's tim."
);quelle
2 Möglichkeiten, dies zu umgehen:
denn
'
du kannst es einfach in der Zeichenkette verdoppeln, zBselect 'I''m happpy'
- bekommst:I'm happy
Für jeden Charakter, dessen Sie sich nicht sicher sind: In SQL Server können Sie den Unicode eines beliebigen Zeichens erhalten, indem
select unicode(':')
Sie (Sie behalten die Nummer)Also diesen Fall kannst du auch
select 'I'+nchar(39)+'m happpy'
quelle
Eine andere Sache, auf die Sie achten sollten, ist, ob es wirklich als klassischer ASCII '(ASCII 27) oder Unicode 2019 (der ähnlich aussieht, aber nicht gleich aussieht) gespeichert ist oder nicht.
Dies ist keine große Sache bei Beilagen, aber es kann die Welt bei Auswahl und Aktualisierung bedeuten.
Wenn es sich um den Unicode-Wert handelt, wird das Escapezeichen in einer WHERE-Klausel (z. B. wobei blah = 'Workers' Comp ') so zurückgegeben, als ob der gesuchte Wert nicht vorhanden wäre, wenn das' in "Worker's Comp" tatsächlich das ist Unicode-Wert.
Wenn Ihre Clientanwendung die Eingabe mit freiem Schlüssel sowie das Kopieren und Einfügen unterstützt, kann dies in einigen Zeilen Unicode und in anderen Zeilen ASCII sein!
Eine einfache Möglichkeit, dies zu bestätigen, besteht darin, eine offene Abfrage durchzuführen, die den gesuchten Wert zurückbringt, und diesen dann zu kopieren und in Notepad ++ oder einen anderen Unicode-unterstützenden Editor einzufügen.
Das unterschiedliche Erscheinungsbild zwischen dem ASCII-Wert und dem Unicode-Wert sollte für die Augen offensichtlich sein. Wenn Sie sich jedoch zum Anal neigen, wird es in einem Hex-Editor als 27 (ASCII) oder 92 (Unicode) angezeigt.
quelle
Viele von uns wissen, dass die beliebte Methode, einfachen Anführungszeichen zu entkommen, darin besteht, sie wie unten beschrieben leicht zu verdoppeln.
Wir werden nach anderen alternativen Möglichkeiten suchen, um den einfachen Anführungszeichen zu entkommen.
1. UNICODE-Zeichen
39 ist das UNICODE-Zeichen von Single Quote. So können wir es wie unten verwenden.
2.QUOTED_IDENTIFIER
Eine andere einfache und beste alternative Lösung ist die Verwendung von QUOTED_IDENTIFIER. Wenn QUOTED_IDENTIFIER auf OFF gesetzt ist, können die Zeichenfolgen in doppelte Anführungszeichen gesetzt werden. In diesem Szenario müssen wir uns keinen einfachen Anführungszeichen entziehen. Dieser Weg wäre also sehr hilfreich, wenn Sie viele Zeichenfolgenwerte in einfachen Anführungszeichen verwenden. Dies ist sehr hilfreich, wenn so viele Zeilen von INSERT / UPDATE-Skripten verwendet werden, in denen Spaltenwerte in einfache Anführungszeichen gesetzt werden.
FAZIT
Die oben genannten Methoden gelten sowohl für AZURE als auch für On Premises.
quelle
Die folgende Syntax entgeht Ihnen NUR EIN Anführungszeichen:
Das Ergebnis ist ein einfaches Anführungszeichen. Könnte sehr hilfreich sein, um dynamisches SQL zu erstellen :).
quelle
Das sollte funktionieren
quelle
Fügen Sie einfach ein 'ein, bevor etwas eingefügt werden soll. Es wird wie ein Escape-Zeichen in sqlServer sein
Beispiel: Wenn Sie ein Feld als haben, geht es mir gut . Sie können Folgendes tun: UPDATE my_table SET row = 'Mir geht es gut.';
quelle
Dies sollte funktionieren: Verwenden Sie einen Schrägstrich und setzen Sie ein doppeltes Anführungszeichen
quelle
PRINT \"hi, my name's tim.\";
das in SSMS funktionieren wird? Es funktioniert überhaupt nicht und niemand hat jemals gesagt, dass es funktioniert.