Sql server SQLCMD命令,如何将输出保存到日志文件

Sql server SQLCMD命令,如何将输出保存到日志文件,sql-server,batch-file,cmd,sqlcmd,logfile,Sql Server,Batch File,Cmd,Sqlcmd,Logfile,下面的问题帮助我解决了执行文件中多个SQL脚本的问题。 但是,我不知道如何将输出重定向到单独的日志文件中。有人建议使用下面的脚本,但由于我不理解它,所以它不起作用,我无法找出错误 for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) 用于(*.sql)中的%f执行sqlcmd/S/d/E/i“%f”>>sql.log 2>&1)

下面的问题帮助我解决了执行文件中多个SQL脚本的问题。 但是,我不知道如何将输出重定向到单独的日志文件中。有人建议使用下面的脚本,但由于我不理解它,所以它不起作用,我无法找出错误

for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) 
用于(*.sql)中的%f执行sqlcmd/S/d/E/i“%f”>>sql.log 2>&1)

您正在寻求命令重定向

根据你的例子——

对于(*.sql)中的%f执行sqlcmd/S/d/E/i“%f”>>sql.log 2>&1

sql脚本执行完成后,输出将被重定向到文件末尾(此处为sql.log),并将命令输出附加到文件末尾,而不删除文件中已有的信息,并将STDERR(2)重定向到STDOUT句柄(1)-
2>&1


更多信息和信息

如果需要输出到一个公共文件中,那么应该使用@Abhishek的答案


如果需要将输出输入到每个输入sql文件的单独日志文件中 然后可以使用
sqlcmd
命令的
-o
参数。您的
bat
文件可能如下所示:

for %%G in (*.sql) do sqlcmd /S <servername> /d <dbname> -E -i"%%G" -o C:\logs\%%G.log
pause
对于(*.sql)中的%%G执行sqlcmd/S/d-E-i“%%G”-o C:\logs\%%G.log
暂停
在这种情况下

1.sql

2.sql

您将获得:

1.sql.log

2.sql.log


我一定错过了什么,因为它对我不起作用。我完全按照说明做了,但没有在我的目录中保存日志。您可以通过以下方式获得相同的结果:
对于(*.sql)do中的%%G(sqlcmd/S/d-E-I“%%G”>C:\logs\%%~nG.log)
在这种情况下,对于
file1.sql
file2.sql
您将获得
file1.log
file2.log