Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在批处理中执行SQL脚本_Sql_Sql Server_Sql Server 2008_Tsql_Batch File - Fatal编程技术网

在批处理中执行SQL脚本

在批处理中执行SQL脚本,sql,sql-server,sql-server-2008,tsql,batch-file,Sql,Sql Server,Sql Server 2008,Tsql,Batch File,我有大约100个脚本需要在SSM上执行。如何将它们作为一个批执行,而不是单独执行 我试过用这个,但没用 @echo off ECHO %USERNAME% started the batch process at %TIME% >output.txt FOR %%? in ("1.01*.SQL") DO ( sqlcmd.exe -S local -E -d collect -i %%? >>output.txt ) pause 以下操作将运行目录中的所有

我有大约100个脚本需要在SSM上执行。如何将它们作为一个批执行,而不是单独执行

我试过用这个,但没用

@echo off
ECHO %USERNAME% started the batch process at %TIME%  >output.txt


FOR %%? in ("1.01*.SQL") DO 
 (
sqlcmd.exe  -S local -E   -d collect -i %%? >>output.txt
)

pause

以下操作将运行目录中的所有脚本,将数据输出到.log文件,并将错误输出到.err.log文件:

@echo off
echo "Enter Server"
set /p SERVER=

echo "Enter Database"
set /p DATABASE=

if exist *.log ( del *.log )

rem Process the files
for %%i in (*.sql) do osql -E -S %SERVER% -d %DATABASE% -i"%%i" -m0 -w500 -I -b -r  -o"%%i.log"  2>%%i.err.log

rem Remove empty .err files (ie had no errors)
for %%a in (*.err.log) do if %%~za==0 del "%%a"


pause

注意:此版本的早期版本使用了
sqlcmd
,但事实证明,sqlcmd在输出日志中丢失了数据。以下操作将运行目录中的所有脚本,将数据输出到.log文件,并将错误输出到.err.log文件:

@echo off
echo "Enter Server"
set /p SERVER=

echo "Enter Database"
set /p DATABASE=

if exist *.log ( del *.log )

rem Process the files
for %%i in (*.sql) do osql -E -S %SERVER% -d %DATABASE% -i"%%i" -m0 -w500 -I -b -r  -o"%%i.log"  2>%%i.err.log

rem Remove empty .err files (ie had no errors)
for %%a in (*.err.log) do if %%~za==0 del "%%a"


pause
注意:早期版本使用的是
sqlcmd
,但事实证明,sqlcmd在输出日志中遗漏了数据

对所有人:

我发现上面的一些问题,比如Windows 7 Dos不喜欢%%I或%%a,所以我删除了一个“%”字符,然后Dos脚本开始正常工作

下面是我实际运行的脚本版本,其中“1.A00*.SQL”脚本运行会截断我的目标表

“A*.SQL”按顺序运行脚本A01_name.SQL-->A24_name.SQL,这非常好

汉克·弗里曼hfreeman@msn.com

结束

REM“FSA_3.2.2_Runner_for_Insert_Scripts.bat

Rem“脚本运行程序”

Rem“如何使用此脚本”

Rem“从远程桌面会话打开Dos提示符”

Rem“运行下面的脚本”

Rem“验证数据是否已插入。”

Rem“Hank Freeman 2014年7月15日hfreeman@msn.com"

Rem“*开始*

c:

光盘\

cd C:\Database\u Scripts\Insert\u Scripts

@回音

如果存在*.log(del*.log)

rem“**从这里开始*

rem“运行截断SQL文件”

对于(1.A00.*.SQL)中的%i,执行osql-E-i“%i”-m0-w500-i-b-r-o“%i.log”2>%i.err.log

rem“运行A01-A24 SQL文件”

对于(A*.SQL)中的%i,执行osql-E-i“%i”-m0-w500-i-b-r-o“%i.log”2>%i.err.log

rem删除空的.err文件(即没有错误)

对于(*.err.log)中的%a,如果%za==0删除“%a”,则执行该操作

rem“移除日志-手动操作”

rem如果存在*.log(del*.log)

Rem“*结束*

@呼应

对所有人:

我发现上面的一些问题,比如Windows 7 Dos不喜欢%%I或%%a,所以我删除了一个“%”字符,然后Dos脚本开始正常工作

下面是我实际运行的脚本版本,其中“1.A00*.SQL”脚本运行会截断我的目标表

“A*.SQL”按顺序运行脚本A01_name.SQL-->A24_name.SQL,这非常好

汉克·弗里曼hfreeman@msn.com

结束

REM“FSA_3.2.2_Runner_for_Insert_Scripts.bat

Rem“脚本运行程序”

Rem“如何使用此脚本”

Rem“从远程桌面会话打开Dos提示符”

Rem“运行下面的脚本”

Rem“验证数据是否已插入。”

Rem“Hank Freeman 2014年7月15日hfreeman@msn.com"

Rem“*开始*

c:

光盘\

cd C:\Database\u Scripts\Insert\u Scripts

@回音

如果存在*.log(del*.log)

rem“**从这里开始*

rem“运行截断SQL文件”

对于(1.A00.*.SQL)中的%i,执行osql-E-i“%i”-m0-w500-i-b-r-o“%i.log”2>%i.err.log

rem“运行A01-A24 SQL文件”

对于(A*.SQL)中的%i,执行osql-E-i“%i”-m0-w500-i-b-r-o“%i.log”2>%i.err.log

rem删除空的.err文件(即没有错误)

对于(*.err.log)中的%a,如果%za==0删除“%a”,则执行该操作

rem“移除日志-手动操作”

rem如果存在*.log(del*.log)

Rem“*结束*

@呼应


我运行了批处理,因此它为每个脚本创建了一个.SQl文件,我查看了该文件,它的值如下:1>2>3>4>5>。而且它没有创建任何日志文件或错误日志文件,您将看到“.sql”,因为您尚未启用在windows资源管理器中显示文件扩展名的设置。文件名后面附加了.log,因此它们最终会被命名为“myscript.sql.log”。1>2>3>是osql的输出。我运行了批处理,因此它为每个脚本创建了一个.SQl文件,我查看了该文件,它的值如下:1>2>3>4>5>。而且它没有创建任何日志文件或错误日志文件,您将看到“.sql”,因为您尚未启用在windows资源管理器中显示文件扩展名的设置。文件名后面附加了.log,因此它们最终会被命名为“myscript.sql.log”。1>2>3>是osql的输出。