私は、1つ以上の非常に長い(時には愚かな長い)文字列を含むSQLスクリプトを使用していることがあります。通常、これらはVARBINARY
ファイル/アセンブリを表すリテラル/定数ですが、テキストの場合もあります。
本当に長い文字列の主な問題は、一部のテキストエディターでは文字列をうまく処理できないことです。たとえばVARBINARY
、CREATE ASSEMBLY [AssemblyName] FROM 0x....
ステートメントで使用するリテラルがあり、アセンブリ自体のサイズは1 MBをわずかに超えています。これは、各バイトが16進表記で表されるために2文字を必要とするため、テキストファイルでは200万文字を少し上回ります。 (例0x1F
= a 1
およびan F
)。SQL Server Management Studio(SSMS)はこれをうまく処理せず、その行をスクロールしようとすると数秒間ハングします。実際、一部のバージョン(これがまだ発生するかどうかは不明)では、特定の長さの行が少なくとも1行あるスクリプトを開くと、長い行に関する警告が表示されることもあります。
2番目の問題は、ワードラップを有効にせずにエディターで使用したり、オンラインで投稿したりすると、フォーマットが複雑になることです。ここでの問題は、水平スクロールバーのスライダーが非常に狭く、通常は少しでもそれを移動すると、非超長いテキストがスクロールして見えなくなるということです。
現在、T-SQLはコマンドを改行またはセミコロンで終了しません(SQL Server 2005以降、セミコロンが推奨/推奨されています)。したがって、SQL Serverは各ステートメントを解析する方法を知っているので、いつ終了するかがわかるので、newline/ carriage-return+ だけで区切られた長い行を複数の行に分割するline-feedように見えるのは、不合理に見えません。しかし、これはどちらの場合でも機能しません。
PRINT 'Line1
Line2';
戻り値([メッセージ]タブ):
Line1
Line2
そして、改行はリテラル/定数内にあるので、それは十分に理にかなっています。しかし、これを行うことVARBINARY
もできません。
PRINT 0x1234
5678;
エラーが出ます。