sql >> データベース >  >> RDS >> Sqlserver

SQL ストアド プロシージャをバッチ経由で .sql ファイルに保存する方法

    スクリプトを使用してバッチ ファイルを作成します (フォーマットについて申し訳ありませんが、バッチを実行するにはインラインにする必要があります):

    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 からのものです!



    1. golanggorm基になるmysqlクエリにアクセスします

    2. HaproxyとKeepalivedをインストールする方法

    3. MySQLデータベースの名前をすばやく変更する(スキーマ名を変更する)にはどうすればよいですか?

    4. 2つのテーブルをマージするMySQLの単一ステートメント