コマンドラインからこれを実行する必要があると言うので、すでに構築した構造に依存するコードがたくさんある場合は、次のようにすることができます。
- スクリプトの一時的なコピーを作成します
- @MainDBを検索して、一時スクリプトのパラメーターとして渡したDB名に置き換えます
- sqlcmdツールを使用して一時スクリプトを実行します
明らかに、このオプションが必要な場合は、スクリプトからDECLARE @MainDB varchar(30)=NULLを削除してください。
このアプローチを選択した場合、さまざまな異なるテクノロジ(PowerShell、Python、バッチファイル、VBScriptなど)を使用して3つのステップを実装できます。
VBScriptファイルアプローチ:
set obj = CreateObject("Scriptlet.TypeLib")
tempsqlfile = obj.GUID & ".sql" 'get a new name for your sql file
set fso = CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.OpenTextFile(tempsqlfile, ForReading) 'open the template file
strSQLText = objFile.ReadAll
objFile.Close
strNewSQLText = Replace(strSQLText, "@MainDB", Wscript.Arguments(1)) 'replace the db name
Set objFile = objFSO.OpenTextFile(tempsqlfile, ForWriting)
objFile.WriteLine strNewText 'write the new file
objFile.Close
Set Shell = WScript.CreateObject("WScript.Shell")
commandLine = "osql -E -i " & Wscript.Arguments(0) & -o " & tempsqlfile & ".rpt"
Set oExec = Shell.Exec(commandLine)
変数名についてお詫びします-私はさまざまな場所から断片を切り取って貼り付けましたが、要点を理解する必要があります。
(また、これらすべてのオプションからVBScriptを選択したことをお詫びします。また、欠落しているパラメーターのチェックでエラーが発生しないことに注意してください)
上記のように、そのスクリプトを「runmystuff.vbs」として保存すると、次のことができます。
runmystuff.vbs sqlfile.sql MagicNewDB
これにより、スクリプト内のすべての場所で@MainDBがMagicNewDBに置き換えられ、osqlを使用して実行されます。