スクリプトを使用してバッチ ファイルを作成します (フォーマットについて申し訳ありませんが、バッチを実行するにはインラインにする必要があります):
osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_TYPE = 'PROCEDURE'" -n -o "sp_list.txt"
for /f %%a in (sp_list.txt) do osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_NAME = '%%a'" -n -o "%%a.sql"
「run.bat」という名前を付けます。ここで、バッチを使用してパラメーターを実行するには:
run.bat [ユーザー名] [パスワード] [サーバー名] [データベース]
例:
run.bat sa pwd111 localhost\SQLEXPRESS master
最初にすべてのストアド プロシージャ名がファイル sp_list.txt に保存され、次に個別のスクリプト ファイルに 1 つずつ保存されます。唯一の問題 - 結果カウントを含む各スクリプトの最後の行 - 私はそれに取り組んでいます:)
編集済み :クエリのバグが修正されました
「影響を受けた行」の行を削除
では、もう 1 つバッチを作成する必要があります:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
「line_del.bat」という名前を付けます。最初のパラメーターは処理するファイル、2番目のパラメーターは削除する行を検索する文字列です。ここで、メイン バッチを変更します (再度、書式について申し訳ありません):
osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_TYPE = 'PROCEDURE'" -n -o "sp_list.txt"
call line_del sp_list.txt "rows affected"
call line_del sp_list.txt "row affected"
for /f %%a in (sp_list.txt) do osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_NAME = '%%a'" -n -o "%%a.sql"
for /f %%a in (sp_list.txt) do call line_del %%a.sql "rows affected"
for /f %%a in (sp_list.txt) do call line_del %%a.sql "row affected"
関連記事を参照してください:
バッチ環境での簡単なプログラミング コマンド
osql ユーティリティ
MSSQL :コードを使用してストアド プロシージャの作成をどのようにスクリプト化しますか?
バッチ ファイルを使用して txt ファイルの特定の行を削除する
:) お気づきかもしれませんが、最後の 2 つは SO からのものです!