Sql server Windows批处理文件仅执行第一行

Sql server Windows批处理文件仅执行第一行,sql-server,file,batch-file,backup,Sql Server,File,Batch File,Backup,我创建了一个具有以下内容的批处理。(批处理文件名为BACKUP_TASK.bat) 如果我将此代码直接复制粘贴到命令提示符,它将按预期执行。但是,如果我双击批处理文件,则命令提示符将打开,并且只编译第一行,不会再发生任何事情。 那么我做错了什么?请帮我解决这个问题。这是因为批处理解释器等待sqlcmd完成,在尝试执行下一行之前。sqlcmd.exe由Windows命令处理器启动cmd.exe,然后Windows命令处理器等待已启动的sqlcmd.exe终止,然后从批处理文件读取下一个命令行,对其

我创建了一个具有以下内容的批处理。(批处理文件名为BACKUP_TASK.bat)

如果我将此代码直接复制粘贴到命令提示符,它将按预期执行。但是,如果我双击批处理文件,则命令提示符将打开,并且只编译第一行,不会再发生任何事情。
那么我做错了什么?请帮我解决这个问题。

这是因为批处理解释器等待
sqlcmd
完成,在尝试执行下一行之前。
sqlcmd.exe
由Windows命令处理器启动
cmd.exe
,然后Windows命令处理器等待已启动的
sqlcmd.exe
终止,然后从批处理文件读取下一个命令行,对其进行解析并执行,请参阅
sqlcmd.exe
不从
cmd.exe
解释的批处理文件中读取要执行的SQL指令。请阅读的Microsoft文档。似乎您最好推迟SQL语句(最多但不包括
GO
)在
.sql
文件中,并使用
-i
开关。@laru:根据您的建议,我创建了一个sql文件,并将批处理文件命名为SQLCMD-E-S SQLEXPRESS-ic:\sql\backup\u cmnd.sql(backup\cmnd.sql包含sql命令)最后,它按预期执行。感谢您宝贵的支持suggestion@mofi:感谢您的建议,并向我介绍CMD.exe的属性
SQLCMD -E -S SQLEXPRESS 
DECLARE @DatabaseName sysname = N'DEMO_DB',
@DatabaseBackupFileName varchar(255);
SET @DatabaseBackupFileName = 'C:\sql\' + @DatabaseName + '_' + REPLACE(replace(convert(varchar(40),getdate()),' ','_'),':','_') + '.bak'; 
BACKUP DATABASE @DatabaseName TO DISK = @DatabaseBackupFileName; 
GO 
exit 
exit