你说你需要从命令行运行它,所以如果你有很多依赖于你已经构建的结构的代码,你可以执行以下操作:
- 创建脚本的临时副本
- 搜索 @MainDB 并将其替换为您作为临时脚本中的参数传入的数据库名称
- 使用 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
这将在脚本中的任何地方用 MagicNewDB 替换 @MainDB,然后使用 osql 运行它。