2

我有多个 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
4

3 回答 3

3

试试大写Q

不要使用 [-q "cmdline query"]

而是使用 [-Q "cmdline query" 并退出]

于 2017-07-08T11:36:08.767 回答
0

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

于 2016-03-30T18:52:21.150 回答
0

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

当命令在没有输入文件或查询的情况下执行时,sqlcmd 会连接到指定的 SQL Server 实例,然后显示一个新行,其中 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
于 2016-03-24T18:23:49.633 回答