Search code examples
batch-filecmdcommand-linesqlcmd

Find all .sql-Files in a Directory and execute them with sqlcmd


I'm still a CMD beginner and would like to import all SQL files I have in a directory structure with sqlcmd to my DB.

If I copy all *.sql into the root folder the following command works:

@ECHO ON
FOR %%G in (*.sql) DO sqlcmd /S *SERVER* /d *DB* /U *USER* /P *PW* -i"%%G" > LOG_lastrun.txt 2> LOG_errors.txt

pause
@ECHO ON
FOR /F "tokens=1 delims=sql" %%G in (*.sql) DO sqlcmd /S *SERVER* /d *DB* /U *USER* /P *PW* -i"%%G" > LOG_lastrun.txt 2> LOG_errors.txt

pause

Unfortunately, it doesn't work for me FOR /F loops. Can you help me here?


Solution

  • The FOR /F works differently. It runs a command. Jusr *.sql is not a command. Also, I suspect that you want to concatenate stdout and stderr output using >>.

    @ECHO ON
    SET "SERVER_NAME=*SERVER*"
    SET "DB_NAME=*DB*"
    SET "LOGIN_ID=*USER*"
    SET "PASS=*PW*"
    
    FOR /F "delims=" %%G IN ('DIR /B "*.sql"') DO (
        sqlcmd  -S %SERVER_NAME% -d %DB_NAME% -U %LOGIN_ID% -P %PASS% -i "%%~G" >> LOG_lastrun.txt 2>> LOG_errors.txt
    )
    
    pause