用于执行什么都不做的sql文件的批处理脚本

时间:2016-04-28 13:23:30

标签: sql-server batch-file

我使用 sqlcmd 实用程序获得了以下批处理脚本,用于执行许多文件中包含的sql脚本:

@echo off
setlocal enabledelayedexpansion
set /p servername=Enter DB Servername :
set /p dbname=Enter Database Name :
set /p spath=Enter Script Path :
set /p usr=Enter the username :
set /p pw=Enter the password :
set hr=%time:~0,2%
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%
set logfilepath= %spath%\output_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%.log
set cmd='dir "%spath%\*.sql" /b'
FOR /f "delims=" %%f IN (%cmd%) DO (
    echo ******PROCESSING %%f FILE******
    echo ******PROCESSING %%f FILE****** >> %logfilepath%
    SQLCMD -S%servername% -U%usr% -P%pw% -d%dbname% -s"  -i%%f -b >> %logfilepath%
    IF !ERRORLEVEL! NEQ 0 GOTO :OnError
)
GOTO :Success

当我运行此脚本时出现“1>”提示将等待命令。我能理解出了什么问题。

非常感谢

1 个答案:

答案 0 :(得分:2)

您正在启动SQLCMD并且没有按照您的意愿行事。对于初学者我会改变这一行

    SQLCMD -S%servername% -U%usr% -P%pw% -d%dbname% -s"  -i%%f -b >> %logfilepath%

SQLCMD -S %servername% -U %usr% -P "%pw%" -d%dbname% -s ^"  -i "%%f" -b >> "%logfilepath%"
  1. 不确定我添加的空格是否需要,但更容易阅读
  2. 如果密码,文件名和路径中存在有毒字符或空格,请使用引号
  3. 转义列分隔符(“)。这可能是导致问题的原因。