Czasami mam skrypt SQL, który ma jeden lub więcej bardzo długich (czasem nawet głupich) ciągów. Zazwyczaj są to VARBINARY
literały / stałe, które reprezentują pliki / zespoły, ale czasami są one tekstem.
Podstawowym problemem związanym z naprawdę długimi łańcuchami jest to, że niektóre edytory tekstu nie radzą sobie z nimi zbyt dobrze. Na przykład mam VARBINARY
literał, którego używam w CREATE ASSEMBLY [AssemblyName] FROM 0x....
instrukcji, a sam zestaw ma nieco ponad 1 MB, co odpowiada nieco ponad 2 milionom znaków w pliku tekstowym, ponieważ każdy bajt wymaga reprezentacji dwóch znaków w notacji szesnastkowej (np. 0x1F
= 1
ai an F
). SQL Server Management Studio (SSMS) nie radzi sobie z tym dobrze i zawiesza się przez kilka sekund, gdy próbuję przewijać tę linię. W rzeczywistości niektóre wersje (nie jestem pewien, czy tak się nadal dzieje) będą nawet wyświetlać ostrzeżenie o długich liniach podczas otwierania skryptu, który ma co najmniej jedną linię na określonej długości.
Drugi problem polega na tym, że komplikuje formatowanie podczas korzystania z edytora bez włączonego zawijania słów lub publikowania w Internecie. Problem polega na tym, że suwak poziomego paska przewijania jest bardzo wąski, a nawet jego nieznaczne przesunięcie zwykle powoduje przewinięcie niezbyt długiego tekstu.
Teraz T-SQL nie kończy poleceń z nowymi liniami, a nawet średnikami (chociaż średniki są preferowane / zalecane, począwszy od SQL Server 2005). Więc od SQL Server umie analizować każde stwierdzenie takie, że nie wie, kiedy to się skończy, to wydaje się długa linia podziału na wielu liniach, oddzielone tylko przez newline/ carriage-return+ line-feed, nie wydaje się nierozsądne. Ale to nie działa w obu przypadkach.
PRINT 'Line1
Line2';
zwraca (w zakładce „Wiadomości”):
Line1
Line2
Ma to sens, ponieważ nowa linia zawiera się w literale / stałej. Ale robienie tego VARBINARY
również nie działa.
PRINT 0x1234
5678;
daje mi błąd.