it-swarm.com.de

Wie vermeide ich ein einfaches Anführungszeichen in SQL Server?

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.');

843
tim_wonil

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

Ergebnisse

value
==================
hi, my name's tim.
1233
Cᴏʀʏ

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
64
Brad Waite

Wie wäre es mit:

insert into my_table values('hi, my name'+char(39)+'s tim.')
40
PaulMcG

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.");

17
Alex Martelli

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'

7
Xin

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.

6
Daniel Schmidt

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.\";
1
Chris Enitan

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.';

0
laxman Thapa

Das sollte funktionieren

DECLARE @singleQuote CHAR 
SET @singleQuote =  CHAR(39)

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
0
Dave Kelly