Ich habe manchmal ein SQL-Skript, das eine oder mehrere superlange (manchmal sogar dumm lange) Zeichenfolgen enthält. In der Regel sind dies VARBINARY
Literale / Konstanten, die Dateien / Assemblys darstellen, gelegentlich jedoch auch Text.
Das Hauptproblem bei sehr langen Zeichenfolgen besteht darin, dass einige Texteditoren sie nicht so gut verarbeiten. Zum Beispiel habe ich ein VARBINARY
Literal, das ich in einer CREATE ASSEMBLY [AssemblyName] FROM 0x....
Anweisung verwende, und die Assembly selbst ist etwas mehr als 1 MB groß, was etwas mehr als 2 Millionen Zeichen in einer Textdatei entspricht, da für jedes Byte zwei Zeichen in hexadezimaler Schreibweise dargestellt werden müssen (zB 0x1F
= a 1
und an F
). SQL Server Management Studio (SSMS) verarbeitet dies nicht gut und bleibt einige Sekunden lang hängen, während ich versuche, über diese Zeile zu scrollen. Tatsächlich zeigen einige Versionen (nicht sicher, ob dies immer noch passiert) sogar eine Warnung vor langen Zeilen an, wenn ein Skript geöffnet wird, das mindestens eine Zeile über eine bestimmte Länge enthält.
Ein sekundäres Problem ist, dass es die Formatierung erschwert, wenn es entweder in einem Editor ohne aktivierten Zeilenumbruch verwendet oder online veröffentlicht wird. Das Problem hierbei ist, dass der Schieberegler für die horizontale Bildlaufleiste sehr schmal ist und beim Verschieben nur ein wenig verschoben wird, wodurch der nicht sehr lange Text normalerweise nicht mehr angezeigt wird.
Jetzt beendet T-SQL Befehle nicht mit Zeilenumbrüchen oder Semikolons (obwohl Semikolons ab SQL Server 2005 bevorzugt / empfohlen werden). Da SQL Server weiß, wie jede Anweisung so analysiert wird, dass sie weiß, wann sie endet, scheint es nicht unangemessen , die lange Zeile auf mehrere Zeilen aufzuteilen, die nur durch ein newline/ carriage-return+ getrennt sind line-feed. Dies funktioniert jedoch in beiden Fällen nicht.
PRINT 'Line1
Line2';
gibt zurück (auf der Registerkarte "Nachrichten"):
Line1
Line2
Und das macht Sinn genug, da die Newline innerhalb eines Literal / einer Konstante liegt. Aber dies für ein zu tun, VARBINARY
funktioniert auch nicht.
PRINT 0x1234
5678;
gibt mir einen Fehler.
quelle