Ich versuche, einige Textdaten in SQL Server
9 in eine Tabelle zu insert
.
Der Text enthält ein einfaches Anführungszeichen (').
Wie entkomme ich dem?
Ich habe versucht, zwei einfache Anführungszeichen zu verwenden, aber es hat mich einige Fehler geworfen.
z.B. insert into my_table values('hi, my name''s tim.');
Einfache Anführungszeichen werden durch Verdoppeln ausgeblendet, so wie Sie es in Ihrem Beispiel gezeigt haben. Die folgende SQL veranschaulicht diese Funktionalität. Ich habe es auf SQL Server 2008 getestet:
DECLARE @my_table TABLE (
[value] VARCHAR(200)
)
INSERT INTO @my_table VALUES ('hi, my name''s tim.')
SELECT * FROM @my_table
value
==================
hi, my name's tim.
Wenn es bei Ihnen nicht funktioniert, Ihr einfaches Anführungszeichen mit einem anderen einfachen Anführungszeichen zu maskieren (wie bei einer meiner letzten REPLACE()
Abfragen), können Sie SET QUOTED_IDENTIFIER OFF
vor Ihrer Abfrage und dann SET QUOTED_IDENTIFIER ON
verwenden ] _ 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 es mit:
insert into my_table values('hi, my name'+char(39)+'s tim.')
Die Verdoppelung des Zitats hätte funktionieren müssen, 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 Anführungszeichen um die Zeichenfolge. Das heißt,
insert into my_table values("hi, my name's tim."
);
2 Möglichkeiten, dies zu umgehen:
für '
können Sie es einfach in der Zeichenfolge verdoppeln, z. select 'I''m happpy' -- will get: I'm happy
Für jeden Charakter, dessen Sie sich nicht sicher sind: In SQL Server können Sie den Unicode jedes Charakters mit select unicode(':')
erhalten.
In diesem Fall können Sie also auch select 'I'+nchar(39)+'m happpy'
Außerdem ist zu beachten, ob es wirklich als klassisches ASCII '(ASCII 27) oder als Unicode 2019 (das zwar ähnlich, aber nicht gleich aussieht) gespeichert ist oder nicht.
Dies ist keine große Sache bei Beilagen, aber es kann bedeuten, dass die Welt bei Auswahl und Aktualisierung handelt.
Wenn es sich um den Unicode-Wert handelt, wird ein Escape-Zeichen in einer WHERE-Klausel (z. B. where blah = 'Workers''s Comp') zurückgegeben, als ob der gesuchte Wert nicht vorhanden wäre, wenn das 'in "Worker's "Comp" ist eigentlich der Unicode-Wert.
Wenn Ihre Client-Anwendung sowohl Free-Key- als auch Copy-and-Paste-basierte Eingaben unterstützt, kann dies in einigen Zeilen Unicode und in anderen 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 Aussehen 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.
Dies sollte funktionieren: Verwenden Sie einen umgekehrten Schrägstrich und setzen Sie ein doppeltes Anführungszeichen
"UPDATE my_table SET row =\"hi, my name's tim.\";
Fügen Sie einfach ein 'vor dem einzufügenden Element ein. Es wird wie ein Escape-Zeichen in sqlServer sein
Beispiel: Wenn Sie ein Feld als haben, mir geht es gut. Sie können Folgendes tun: UPDATE my_table SET row = 'Mir geht es gut.';
Das sollte funktionieren
DECLARE @singleQuote CHAR
SET @singleQuote = CHAR(39)
insert into my_table values('hi, my name'+ @singleQuote +'s tim.')