SET NOCOUNT ON を追加すると、確かに line_del.bat が不要になりましたが、syscomments を sys.sql_modules に置き換えると、各ストアド プロシージャが 258 文字に切り捨てられました。したがって、最良の結果を得るために、私が使用したコードは次のとおりです。
sqlcmd -E -S SERVER-d DB -h-1 -Q "SET NOCOUNT ON SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_TYPE = 'PROCEDURE'" -o "sp_list.txt"
for /f %%a in (sp_list.txt) do sqlcmd -E -S SERVER-d DB -h-1 -Q "SET NOCOUNT ON SELECT text from dbo.syscomments WHERE id = OBJECT_ID('%%a')" -o "%%a.sql"
これは機能し、line_del.bat を使用する必要はありませんでした。SSMS ウィザード (タスク/スクリプトの生成/ストアド プロシージャ/すべて選択) を使用して手動でエクスポートしたときに得られなかったものは次のとおりです。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
各 .sql の先頭、および末尾の GO コマンドにも。それほど重要ではありませんが、注意すべきことがあります。Max Gontar、Seansilver、Lee の貢献に感謝します。データベース内のストアド プロシージャのバックアップを自動化し、バージョン管理を適用できるようになりました。