Несколько команд sqlcmd в командном файле

У меня есть несколько команд sqlcmd для запуска одновременно из командного файла. Каждое утверждение при выполнении отдельно работает отлично. Но если я даю 5 команд sqlsmd в bat-файле, он выполняет только первую, а затем я вижу 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 ответа

Решение

Я не могу запустить его через файл bat. Что я могу сделать, так это запускать команды с QUIT в конце каждой команды из командной строки.

Попробуйте заглавную Q

не используйте [-q "cmdline query"]

но вместо этого используйте [-Q "cmdline query" и выйдите из]

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 помещается в буфер, называемый кэшем операторов. Эти операторы отправляются на SQL Server после ввода команды GO и нажатия клавиши ВВОД. Чтобы выйти из 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
Другие вопросы по тегам