У мене іноді є сценарій SQL, який має одну або кілька наддовгих (іноді навіть дурних) рядків. Зазвичай це VARBINARY
літерали / константи, які представляють файли / збори, але іноді вони є текстовими.
Основна проблема справді довгих рядків полягає в тому, що деякі текстові редактори не так добре справляються з ними. Наприклад, у мене є VARBINARY
літерал, який я використовую в CREATE ASSEMBLY [AssemblyName] FROM 0x....
заяві, а сама збірка має розмір трохи більше 1 Мб, що дорівнює трохи більше 2 мільйонів символів у текстовому файлі, оскільки кожен байт вимагає, щоб два символи були представлені в шістнадцятковій нотації (наприклад, 0x1F
= a 1
і an F
). Студія управління SQL Server (SSMS) не справляється з цим добре і зависає кілька секунд, коли я намагаюся прокрутити цей рядок. Насправді, деякі версії (не впевнені, чи це все-таки відбудеться) навіть відображатимуть попередження про довгі рядки при відкритті сценарію, який має принаймні один рядок на певну довжину.
Друга проблема полягає в тому, що вона ускладнює форматування під час використання в редакторі без ввімкнення обговорення слів або публікації в Інтернеті. Проблема тут полягає в тому, що повзунок для горизонтальної смуги прокрутки дуже вузький, і переміщуючи його навіть небагато, як правило, прокручується не надто довгий текст з поля зору.
Тепер T-SQL не завершує команди з новими рядками або навіть напівколонами (хоча напівколонки є кращими / рекомендованими, починаючи з SQL Server 2005). Отже, оскільки SQL Server знає, як аналізувати кожне твердження таким чином, що воно знає, коли воно закінчується, здається, що розділення довгої лінії на кілька рядків, розділених лише a newline/ carriage-return+ line-feed, не здається необґрунтованим. Але це не працює в будь-якому випадку.
PRINT 'Line1
Line2';
повернення (на вкладці "Повідомлення"):
Line1
Line2
І це має достатній сенс, оскільки новий рядок знаходиться в прямому / постійному. Але робити це VARBINARY
також не виходить.
PRINT 0x1234
5678;
дає мені помилку.