【发布时间】:2014-08-07 17:57:02
【问题描述】:
我一直在玩数据库备份自动化脚本,尤其是这个链接上的那个:
http://support.microsoft.com/kb/2019698
我让一切工作正常,甚至使用 7zip 添加了自动压缩、日志记录,并在 vbscript 的帮助下发送了电子邮件预定通知。但是,即使没有所有这些,您也可以看到这有点沉重。它现在很容易达到 400 行代码。
我真的不习惯像这样把我所有的东西都放在一个街区里,我想把它分开。所以我可以说一个名为 BackupCompress.sql 的压缩文件和一个名为 BackupLogReport.sql 的日志文件,所有这些都将从主 Backup.sql 脚本中调用。
Backup.sql 脚本又从一个设置为在调度程序中运行的 Backup.bat 文件运行。
所有这一切都像一个魅力。但是我不知道如何从 BackupLogReport.sql 中调用 BackupCompress.sql 并传入参数并获取返回值。
在 Backup.bat 文件中,我使用此命令启动所有内容并将参数传递给它:
SQLCMD -S %SQLDATABASE% -d master -i %BACKUP_FOLDER%\Backup.sql -v Pram1="%Pram1%"
在 Backup.sql 文件中,我只需通过以下方式获取这些参数:
DECLARE @Param1 NVARCHAR(256) = '$(Param)'
从那时起,当我的脚本运行时,它会使用我想要传入的任何内容。
我尝试使用标准 sql 存储过程逻辑来调用另一个过程,如下所示:
EXEC BackupCompress.sql
@AnotherParam = @Param1
我也试过了:
EXECUTE sp_executesql BackupCompress.sql @Param1
我终于尝试了:
SET @cmd = 'SQLCMD -S ' + @@ServerName + ' -d master -i $(BACKUP_FOLDER)\BackupCompress.sql -v Param1 = ' + @Param1
EXEC xp_cmdshell @cmd, no_output
但它不起作用,我正在压缩的文件根本没有被压缩。我没有收到错误消息。其他一切都继续正常工作。
编辑:我在最后一条上收到了一条错误消息,但我已修复它 - 但是,我仍然没有得到我的小 zip 文件。我什至将 print's 放入文件中,看看它是否真的被执行了,但似乎没有。
EDIT2:我尝试过的另一个选项,几乎可以工作,但无法弄清楚如何将参数从 sql 文件中传递到另一个文件......结果它会生成一个错误,说它在处理时找不到文件路径作为文字字符串而不是我要传递的变量值。
:!!SQLCMD -S @@ServerName -d master -i @CFG_BACKUP_PATH\BackupCompress.sql -v Param1 = @Param1
【问题讨论】:
标签: sql sql-server sql-server-2008 stored-procedures sql-server-2012