Đôi khi tôi có một tập lệnh SQL có một hoặc nhiều chuỗi siêu dài (đôi khi thậm chí dài ngu ngốc). Thông thường, đây là những VARBINARY
chữ / hằng đại diện cho các tệp / Tập hợp, nhưng đôi khi chúng là văn bản.
Vấn đề chính với các chuỗi thực sự dài là một số trình soạn thảo văn bản không xử lý tốt tất cả. Ví dụ: tôi có một VARBINARY
nghĩa đen mà tôi sử dụng trong một CREATE ASSEMBLY [AssemblyName] FROM 0x....
câu lệnh và bản thân Hội có kích thước chỉ hơn 1 MB, tương đương với chỉ hơn 2 triệu ký tự trong một tệp văn bản vì mỗi byte yêu cầu hai ký tự được thể hiện bằng ký hiệu hex (ví dụ 0x1F
= a 1
và an F
). SQL Server Management Studio (SSMS) không xử lý tốt việc này và bị treo trong vài giây khi tôi cố gắng cuộn qua dòng đó. Và trên thực tế, một số phiên bản (không chắc điều này có xảy ra hay không) thậm chí sẽ hiển thị cảnh báo về các dòng dài khi mở tập lệnh có ít nhất một dòng trên một độ dài nhất định.
Vấn đề thứ yếu là nó làm phức tạp định dạng khi sử dụng trong trình chỉnh sửa mà không bật tính năng ngắt từ hoặc đăng trực tuyến. Vấn đề ở đây là thanh trượt cho thanh cuộn ngang rất hẹp và di chuyển nó dù chỉ một chút thường cuộn văn bản không siêu dài ra khỏi tầm nhìn.
Bây giờ, T-SQL không chấm dứt các lệnh bằng dòng mới hoặc thậm chí là dấu chấm phẩy (mặc dù dấu chấm phẩy được ưu tiên / khuyến nghị, bắt đầu với SQL Server 2005). Vì SQL Server biết cách phân tích từng câu lệnh để nó biết khi nào nó kết thúc, có vẻ như việc chia dòng dài trên nhiều dòng, chỉ được phân tách bằng dấu newline/ carriage-return+ line-feed, có vẻ không hợp lý. Nhưng điều này không hoạt động trong cả hai trường hợp.
PRINT 'Line1
Line2';
trả về (trong tab "Tin nhắn"):
Line1
Line2
Và điều đó có ý nghĩa đủ vì dòng mới nằm trong một nghĩa đen / hằng số. Nhưng làm điều này cho một VARBINARY
cũng không làm việc.
PRINT 0x1234
5678;
cho tôi một lỗi