批处理文件中的多个sqlcmd命令

时间:2016-03-24 17:25:14

标签: sql-server database-administration sqlcmd invoke-sqlcmd

我有多个sqlcmd命令一次从批处理文件运行。单独执行时的每个语句都能完美运行但是如果我在bat文件中给出类似5 sqlsmd的命令它只执行第一个命令,然后我看到1>在我的命令行界面,没有任何反应。如何解决这个问题?

注意:每行之前的CALL语句没有工作这是我在研究中找到的唯一解决方案

我正在做什么的例子::

sqlcmd -S servername-q "EXEC msdb.dbo.prc_Backup @BackupType = 'L'       ,@DBName = 'db' ,@BackupDir = 'J:\MSSQL10.MSSQLSERVER\MSSQL\Backup\db2dba' ,@RetainHours = 47       , @create_sub_dir = 0      " >> C:\tlogresult.txt
sqlcmd -S servername -q "EXEC msdb.dbo.prc_Backup @BackupType = 'L'      ,@DBName = 'DB2RuntimeMigration' ,@BackupDir = 'J:\MSSQL10.MSSQLSERVER\MSSQL\Backup\DB2RuntimeMigration' ,@RetainHours = 47         , @create_sub_dir = 0      " >> C:\tlogresult.txt

3 个答案:

答案 0 :(得分:1)

尝试资本Q

不要使用 [-q“cmdline query”]

但改为使用 [-Q“cmdline query”并退出]

答案 1 :(得分:0)

https://msdn.microsoft.com/en-us/library/ms180944.aspx

在没有输入文件或查询的情况下执行命令时,sqlcmd连接到指定的SQL Server实例,然后显示带有1> 1的新行。然后是一个名为sqlcmd提示符的闪烁下划线。 1表示这是Transact-SQL语句的第一行,而sqlcmd提示符是Transact-SQL语句在您键入时开始的位置。

在sqlcmd提示符下,您可以键入Transact-SQL语句和sqlcmd命令,例如GO和EXIT。每个Transact-SQL语句都放在一个名为语句缓存的缓冲区中。键入GO命令并按Enter后,这些语句将发送到SQL Server。要退出sqlcmd,请在新行的开头键入EXIT或QUIT。

...

使用-o选项输出到文件而不是将输出传递给文件,这会阻止您进入交互模式。

或尝试

sqlcmd -S servername-q "EXEC msdb.dbo.prc_Backup @BackupType = 'L'       ,@DBName = 'db' ,@BackupDir = 'J:\MSSQL10.MSSQLSERVER\MSSQL\Backup\db2dba' ,@RetainHours = 47       , @create_sub_dir = 0      " >> C:\tlogresult.txt
exit
sqlcmd -S servername -q "EXEC msdb.dbo.prc_Backup @BackupType = 'L'      ,@DBName = 'DB2RuntimeMigration' ,@BackupDir = 'J:\MSSQL10.MSSQLSERVER\MSSQL\Backup\DB2RuntimeMigration' ,@RetainHours = 47         , @create_sub_dir = 0      " >> C:\tlogresult.txt"
exit

答案 2 :(得分:0)

我无法通过bat文件运行它。我能做的是在命令行的每个命令结束时使用QUIT运行命令。