Wie entkommen ich einen Apostroph in SQL Server?
-
22-09-2019 - |
Frage
Ich versuche, in insert
9 einige Textdaten in eine Tabelle SQL Server
.
Der Text enthält einen Apostroph ( ').
Wie kann ich, dass entkommen?
Ich habe versucht, zwei einfache Anführungszeichen verwenden, aber es warf mir einige Fehler.
zB. insert into my_table values('hi, my name''s tim.');
Lösung
Einfache Anführungszeichen entgangen werden, indem sie bis zu verdoppeln , wie Sie haben uns in Ihrem Beispiel gezeigt. Die folgende SQL stellt diese Funktionalität. Getestet habe ich es auf SQL Server 2008:
DECLARE @my_table TABLE (
[value] VARCHAR(200)
)
INSERT INTO @my_table VALUES ('hi, my name''s tim.')
SELECT * FROM @my_table
Ergebnisse
value
==================
hi, my name's tim.
Andere Tipps
Wenn Ihr Apostroph mit einem anderen Apostroph für Sie funktioniert nicht entkommen (wie es nicht für einen meiner letzten REPLACE()
Anfragen haben), können Sie SET QUOTED_IDENTIFIER OFF
vor Ihrer Abfrage verwenden können, dann SET QUOTED_IDENTIFIER ON
nach Ihrer Anfrage.
Zum Beispiel
SET QUOTED_IDENTIFIER OFF;
UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");
SET QUOTED_IDENTIFIER ON;
-- set OFF then ON again
Wie wäre:
insert into my_table values('hi, my name'+char(39)+'s tim.')
Die Verdoppelung des Zitats oben gearbeitet haben sollte, so ist es eigentümlich ist, dass es keine Arbeit für Sie getan haben; jedoch ist eine Alternative doppelten Anführungszeichen verwendet, und nicht einzelne, um die Zeichenfolge. D.h.
insert into my_table values("hi, my name's tim."
);
2 Möglichkeiten zum Umgehen dieses:
für '
können Sie es einfach in der Zeichenfolge verdoppeln, z.B.
select 'I''m happpy' -- will get: I'm happy
Für jede charactor Sie nicht sicher sind: in SQL-Server, den Sie durch select unicode(':')
jedes Zeichen des Unicode bekommen
So diesem Fall können Sie auch select 'I'+nchar(39)+'m happpy'
Auch eine andere Sache, sorgfältiger zu sein, ist, ob es wirklich als klassisches ASCII gespeichert wird "(ASCII 27) oder Unicode-2019 (das ähnlich aussieht, aber nicht gleich).
Das ist keine große Sache auf Einsätze, aber es kann die Welt auf wählt und Updates bedeuten.
Wenn es der Unicode-Wert dann die Flucht ‚in einer WHERE-Klausel (zB wo blah = 'Arbeiter Comp‘) kehrt wie der Wert, den Sie suchen ist nicht da, wenn die "in‚Arbeiter Comp‘ Frei Schlüssel sowie Kopie ist eigentlich der Unicode-Wert.
Wenn der Client-Anwendung unterstützt und basierte Eingabe einzufügen, könnte es sein, Unicode in einigen Zeilen, und ASCII in anderen!
Ein einfacher Weg, dies zu bestätigen ist durch eine Art von offenem Ende Abfrage zu tun, die für den Wert, den Sie suchen zurückbringen wird, und dann kopieren und einfügen, dass in Notepad ++ oder einer anderen Unicode-Unterstützung Editor.
Die unterschiedliche Aussehen zwischen dem ASCII-Wert und die Unicode sollte man die Augen offensichtlich sein, aber wenn man in Richtung der anal anlehnen, wird es als 27 (ascii) oder 92 (Unicode) in einem hex-Editor angezeigt.
Das sollte funktionieren: einen Backslash verwenden und ein doppeltes Anführungszeichen
put"UPDATE my_table SET row =\"hi, my name's tim.\";
Das sollte funktionieren
DECLARE @singleQuote CHAR
SET @singleQuote = CHAR(39)
insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
Legen Sie einfach ein ", bevor etwas eingefügt werden. Es wird in sqlServer
wie ein Escape-Zeichen seinBeispiel: Wenn Sie ein Feld als haben, Ich bin in Ordnung . du kannst tun: UPDATE my_table SET row = 'I' 'm in Ordnung.';
string value = "Abhishek's";
value = Replace(value,"'","''");