2017-10-19 1 views
0

Wie hier (Backslash) (Transact-SQL) beschrieben können Sie \ als Ende der Zeile zum besseren Lesen einfügen und durch INSERT INTO wird der Text entfernt.SQL Server deaktivieren oder behandeln Backslash Entfernen Newline

Wie gehe ich damit um, wenn ich dieses Verhalten nicht möchte?

Beispiel:

INSERT INTO [table] ([column]) VALUES ('--- 
:path c:\test\ 
:param another_string') 

Aktuelles Ergebnis zur Zeit in dieser Spalte:

--- 
:path c:\test\:param another_string 

Natürlich kann ich meine SQL-Anweisung in diesem Beispiel ändern, aber es zeigt Daten, die von jedem kommen können Eingang.

+0

und wenn Sie mit SSMS arbeiten, können Sie zumindest manuell arbeiten. Es ist tatsächlich ein echtes Problem, wenn das SQL programmatisch aufgebaut ist. Atm meine einzige Idee wäre, die Daten vorzuverarbeiten, um persistent zu bleiben, indem alle abschließenden Backslashes an jedem Zeilenende mit Char (92) ersetzt werden. Aber das scheint Overkill zu sein, um eine bequeme Funktion von MSSQL zu umgehen. – neongrau

+0

Können Sie ein vollständigeres Beispiel angeben? Sie haben nicht beschrieben, wo/wie genau Sie diese Befehle eingeben und was Sie tun sollen. – jurez

+0

Alte Post, aber das Problem ist genau: https://spin.atomicobject.com/2008/03/18/trailing-backslash-problem-and-fix-for-rails-and-sqlserver-2005/ – YvesR

Antwort

0

Der Backslash wird nur dann die aktuelle Zeile fortsetzen, wenn unmittelbar darauf ein Zeilenumbruch folgt. Unter normalen Umständen sollte dies kein Problem sein, außer wenn Sie das Schlussangebot vergessen haben.

Wenn Sie programmgesteuert auf SQL zugreifen, verwenden Sie vorbereitete Anweisungen, um sicherzustellen, dass Sie alle Zeichenfolgen sicher übergeben können, ohne die SQL zu unterbrechen.

+0

Dies ist eine Arbeit Ich habe es auch schon getan. Das würde dazu führen, dass die neue Zeile auf einem sehr niedrigen Niveau in einem Adapter (z. B. Free-TDS) programmatisch gesucht und ersetzt wird. – YvesR

+0

Wenn Ihre Daten von einer beliebigen Eingabe kommen, die Sie nicht kontrollieren können, kann sie immer Sonderzeichen wie Quote, Backslash oder '--' enthalten. Wenn Sie es einfach kopieren und einfügen, ohne es zu umgehen, kann es Ihre SQL-Datei beschädigen (ganz zu schweigen von SQL-Injection-Angriffen). Dies ist einer der Hauptgründe für die Verwendung vorbereiteter Anweisungen. Wenn Sie SSMS verwenden, müssen Sie es selbst tun. Sie können auch die @ 'xxx'-Syntax ausprobieren. – jurez

+0

Sie vermissen das Thema. Natürlich überprüft jedes derzeit verfügbare Framework solche Dinge, um Injektionen usw. zu verhindern. Aber Sie können dieses Verhalten einfach erzeugen, indem Sie eine gespeicherte Prozedur erstellen, die jeden einzufügenden Text erhält. Der Punkt ist, wie man sicherstellen kann, dass dieses '\' Problem auf dem SQL-Server direkt gehandhabt werden kann, da es ein Feature ist, das nicht wirklich jemand, den ich kenne, benötigt, aber viel Ärger verursacht. – YvesR

0
INSERT INTO [table] ([column]) VALUES (N'--- 
:path c:\test\' + CHAR(13) + ' 
:param another_string') 
+0

Dies ist eine Arbeit, die ich auch schon gemacht habe. Das würde dazu führen, dass die neue Zeile auf einem sehr niedrigen Niveau in einem Adapter (z. B. Free-TDS) programmatisch gesucht und ersetzt wird. – YvesR

+0

https://meta.stackoverflow.com/questions/300837/what-comment-should-i-add-to-code-only-answers –