1361 Stimmen

Wie kann ich ein einfaches Anführungszeichen in SQL Server ausblenden?

Ich versuche, die insert einige Textdaten in eine Tabelle in SQL Server 9.

Der Text enthält ein einzelnes Zitat ' .

Wie kann ich dem entgehen?

Ich habe versucht, zwei einfache Anführungszeichen zu verwenden, aber das hat mir einige Fehler eingebracht.

z. B. insert into my_table values('hi, my name''s tim.');

51 Stimmen

"Es gab einige Fehler" - Was waren das für Fehler?

2 Stimmen

Ja, denn der richtige Weg, einfache Anführungszeichen in MSSQL einzufügen, ist, sie zu verdoppeln. Das Beispiel, das Sie uns zeigen, sollte funktionieren. Wie haben Sie diese SQL-Abfrage erstellt, mit welcher Sprache? Oder in SQL Server Management Studio?

1 Stimmen

1935voto

Cᴏʀʏ Punkte 101076

Einfache Anführungszeichen werden durch Verdoppelung vermieden so wie Sie es uns in Ihrem Beispiel gezeigt haben. Das folgende SQL veranschaulicht diese Funktionalität. Ich habe sie 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.

25 Stimmen

Ich habe an der falschen Stelle gesucht, um mein Problem zu beheben. es war nicht ein Zeichen Escape-Problem, nachdem alle. mein Problem war, dass die Datenlänge über die Grenze war. danke für die Beruhigung mir, dass mit dem einfachen Anführungszeichen zweimal ist der richtige Weg, um das Zeichen zu entkommen.

0 Stimmen

Wenn ich also einen Text mit 10.000 Wörtern habe, muss ich dann den gesamten Text ersetzen?

3 Stimmen

@ViniciusLima: Die kurze Antwort ist ja. Das hängt natürlich von der Technologie ab, die Sie für die Speicherung der Daten verwenden werden. Wenn Sie ein ORM verwenden, wird es dies für Sie tun. Wenn Sie Ihre SQL-Befehle manuell erstellen, sollten Sie die Funktion "vorbereitete Anweisungen" der Sprache verwenden. Wenn Sie dies in Management Studio tun, müssen Sie die Ersetzung selbst vornehmen.

91voto

Brad303 Punkte 1051

Wenn Sie Ihr einfaches Anführungszeichen nicht mit einem anderen einfachen Anführungszeichen umgehen können (wie es bei einem meiner letzten REPLACE() Abfragen), können Sie SET QUOTED_IDENTIFIER OFF vor Ihrer Abfrage, 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

3 Stimmen

Normalerweise verwende ich den doppelten Ansatz, aber in einem Fall, in dem ich dynamisches SQL generierte, das dann auf mehreren Servern und Datenbanken ausgeführt wurde, funktionierte diese Lösung für mich, während die Verdopplung in einem bestimmten Fall nicht funktionierte. Vielen Dank für diesen Beitrag!

0 Stimmen

Seien Sie vorsichtig, wenn Sie auf Ansichten und Indizes für berechnete Spalten verweisen, da Sie sonst einen Fehler erhalten können. stackoverflow.com/questions/9235527/

0 Stimmen

@RichardMoss, +1. Gleiches Szenario wie bei Ihnen. Der doppelte Ansatz ist die erste Lösung. Für komplexe Abfragen wie dynamisches SQL über mehrere Server hinweg wird dies funktionieren, der doppelte Ansatz möglicherweise nicht

73voto

PaulMcG Punkte 59178

Wie wäre es damit:

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

68voto

Arulmouzhi Punkte 1320

Viele von uns wissen, dass die beliebteste Methode, einzelnen Zitaten zu entkommen, darin besteht Verdoppelung der Zahl leicht wie unten.

PRINT 'It''s me, Arul.';

Doubling the Single Quotes Method

werden wir uns auf einige andere alternative Möglichkeiten, um die einfachen Anführungszeichen zu umgehen .

1. UNICODE-Zeichen

39 ist das UNICODE-Zeichen für einfache Anführungszeichen. Wir können es also wie unten verwenden.

PRINT 'Hi,it'+CHAR(39)+'s Arul.';
PRINT 'Helo,it'+NCHAR(39)+'s Arul.';

UNICODE Characters

2. ZITIERTER_BEZEICHNER

Eine andere einfache und beste Alternativlösung ist die Verwendung von QUOTED_IDENTIFIER. Wenn QUOTED_IDENTIFIER auf OFF gesetzt ist, können die Zeichenketten in doppelte Anführungszeichen eingeschlossen werden. In diesem Szenario brauchen wir keine einfachen Anführungszeichen zu verwenden. Diese Methode ist also sehr hilfreich bei der Verwendung vieler String-Werte mit einfachen Anführungszeichen. Es ist sehr hilfreich bei der Verwendung vieler Zeilen von INSERT/UPDATE-Skripten, in denen Spaltenwerte in einfachen Anführungszeichen stehen.

SET QUOTED_IDENTIFIER OFF;
PRINT "It's Arul."
SET QUOTED_IDENTIFIER ON;

QUOTE_IDENTIFIER

SCHLUSSFOLGERUNG

Die oben genannten Methoden sind sowohl für AZURE als auch für On Premises anwendbar.

24voto

Xin Punkte 27823

Es gibt 2 Möglichkeiten, dies zu umgehen:


für ' können Sie ihn in der Zeichenkette einfach verdoppeln, z. B. select 'I''m happpy' -- bekommen wird: I'm happy


Für jedes Zeichen, bei dem Sie sich nicht sicher sind: In Sql Server können Sie den Unicode jedes Zeichens erhalten durch select unicode(':') (Sie behalten die Nummer)

In diesem Fall können Sie also auch select 'I'+nchar(39)+'m happpy'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X