บางครั้งฉันมีสคริปต์ SQL ที่มีอย่างน้อยหนึ่งสตริงที่ยาวเป็นพิเศษ (บางครั้งก็ยิ่งยาว) โดยทั่วไปสิ่งเหล่านี้เป็นVARBINARY
ตัวอักษร / ค่าคงที่ที่เป็นตัวแทนของไฟล์ / แอสเซมบลี แต่บางครั้งพวกเขาก็เป็นข้อความ
ปัญหาหลักของสายอักขระที่ยาวมาก ๆ คือตัวแก้ไขข้อความบางตัวไม่สามารถจัดการได้ทั้งหมด ตัวอย่างเช่นฉันมีVARBINARY
ตัวอักษรที่ฉันใช้ในCREATE ASSEMBLY [AssemblyName] FROM 0x....
คำสั่งและแอสเซมบลีตัวเองมีขนาดเพียง 1 MB ซึ่งเท่ากับเพียง 2 ล้านอักขระในไฟล์ข้อความเนื่องจากแต่ละไบต์ต้องการอักขระสองตัวที่จะแสดงในรูปแบบเลขฐานสิบหก (เช่น0x1F
= a 1
และ an F
) SQL Server Management Studio (SSMS) จัดการได้ไม่ดีและค้างนานหลายวินาทีในขณะที่ฉันพยายามเลื่อนข้ามบรรทัดนั้น และในความเป็นจริงแล้วบางเวอร์ชั่น (ไม่แน่ใจว่ายังคงเกิดขึ้น) จะแสดงคำเตือนเกี่ยวกับบรรทัดยาวเมื่อเปิดสคริปต์ที่มีอย่างน้อยหนึ่งบรรทัดในระยะเวลาที่กำหนด
ปัญหาที่สองคือมันซับซ้อนการจัดรูปแบบเมื่อใช้ในการแก้ไขโดยไม่ต้องเปิดใช้งานการตัดคำหรือโพสต์ออนไลน์ ปัญหาที่นี่คือตัวเลื่อนสำหรับแถบเลื่อนแนวนอนแคบมากและเคลื่อนย้ายได้แม้เพียงเล็กน้อยก็จะเลื่อนข้อความที่ไม่ยาวมากออกไปให้พ้น
ตอนนี้ T-SQL จะไม่ยกเลิกคำสั่งด้วยบรรทัดใหม่หรือแม้แต่เซมิโคลอน (แม้ว่าเซมิโคลอนนั้นจะเป็นที่ต้องการ / แนะนำโดยเริ่มจาก SQL Server 2005) ดังนั้นเนื่องจาก SQL Server รู้วิธีแยกแต่ละคำสั่งเพื่อให้รู้เมื่อสิ้นสุดมันจึงดูเหมือนว่าการแบ่งบรรทัดยาวข้ามหลายบรรทัดโดยคั่นด้วย a newline/ carriage-return+ line-feedเท่านั้นดูเหมือนจะไม่มีเหตุผล แต่นี่ไม่ได้ผลในทั้งสองกรณี
PRINT 'Line1
Line2';
ส่งคืน (ในแท็บ "ข้อความ"):
Line1
Line2
และนั่นก็สมเหตุสมผลพอที่บรรทัดใหม่จะอยู่ภายในตัวอักษร / ค่าคงที่ แต่การทำเช่นนี้สำหรับ a VARBINARY
ยังไม่ทำงาน
PRINT 0x1234
5678;
ทำให้ฉันมีข้อผิดพลาด