バッチファイルの更新は次のとおりです(8000文字を超える制限で機能しますが、この制限を調整するのは簡単です):
for /f %%a in (sp_list.txt) do sqlcmd -E -S SERVER -d DB -h-1 -Q "DECLARE @I INT, @SP1 NVARCHAR(4000), @SP2 NVARCHAR(4000) SET @I = 0 SET @SP1 = '' SET @SP2 = '' SELECT @I = @I + 1, @SP1 = CASE WHEN @I = 1 THEN text ELSE @SP1 END, @SP2 = CASE WHEN @I = 2 THEN text ELSE @SP2 END from dbo.syscomments WHERE id = OBJECT_ID('%%a') SELECT @SP1+@SP2" -o "%%a.sql"
個人的に私は非常に大規模な手順を懸念しています。
これは制限ですが、行番号が 4000 文字を超えるストアド プロシージャがある場合、このブログを読んで解決できるよりもはるかに大きな問題が発生する可能性があります。したがって、ほとんどの人にとっては大したことではないでしょう。私が言ったように、あなたの行がそんなに長いなら、あなたはより大きな問題を抱えています!
Adam Machanic - TSQL ルーチンの「反映」
しかし、大規模な手順は問題にならないという考えもあります。
「テキスト」フィールドは NVARCHAR(4000) として定義されているため、各行には最大 4000 文字しか保持できません。ただし、オブジェクト コードが 4000 文字をはるかに超えることも珍しくありません。
Solomon Rutzky - テキストのオブジェクトの検索