To run multiple sql files in a sequence do this
1>Put all your .sql files that you want to execute in one folder
2>Name them alphabetically in the order you want them to be executed. (For instance if I have two sql files, I will name the sql file that I want to be executed first as 1.sql and second as 2.sql). The reason is the batch file below picks up files in the ascending order of their names.
THE SCRIPT BELOW CAN ONLY BE EXECUTED ON MACHINES THAT HAVE SQL SERVER INSTALLED
3> In the green text below, replace the servername with the name of your server and the database name with the name of the database. Then copy the text into notepad and save it with a .bat extension. Note that the script is slightly different for windows xp and windows 7 machines
For windows xp use
@echo off
ECHO %USERNAME% started the batch process at %TIME% >output.txt
FOR %%? in ("*.SQL") DO
(
sqlcmd.exe -S servername -E -d DatabaseName -i %%? >>output.txt
)
pause
For Windows 7 use
@echo off
ECHO %USERNAME% started the batch process at %TIME% >output.txt
for %%f in (*.sql) do (
sqlcmd.exe -S servername -E -d DatabaseName -i %%f >>output.txt
)
pause
4>Double click the the .bat file and it will execute all the .sql files in that folder. It will write the errors (if any) into a file called output.txt
Check out the image below for a sample scenario
To execute queries one by one in any order you want, use this
@echo off
ECHO %USERNAME% started the batch process at %TIME% >output.txt
sqlcmd.exe -S servername -E -d DatabaseName -i SQLQuery1.sql>>output.txt
sqlcmd.exe -S servername -E -d DatabaseName -i SQLQuery2.sql>>output.txt
pause
1>Put all your .sql files that you want to execute in one folder
2>Name them alphabetically in the order you want them to be executed. (For instance if I have two sql files, I will name the sql file that I want to be executed first as 1.sql and second as 2.sql). The reason is the batch file below picks up files in the ascending order of their names.
THE SCRIPT BELOW CAN ONLY BE EXECUTED ON MACHINES THAT HAVE SQL SERVER INSTALLED
3> In the green text below, replace the servername with the name of your server and the database name with the name of the database. Then copy the text into notepad and save it with a .bat extension. Note that the script is slightly different for windows xp and windows 7 machines
For windows xp use
@echo off
ECHO %USERNAME% started the batch process at %TIME% >output.txt
FOR %%? in ("*.SQL") DO
(
sqlcmd.exe -S servername -E -d DatabaseName -i %%? >>output.txt
)
pause
For Windows 7 use
@echo off
ECHO %USERNAME% started the batch process at %TIME% >output.txt
for %%f in (*.sql) do (
sqlcmd.exe -S servername -E -d DatabaseName -i %%f >>output.txt
)
pause
4>Double click the the .bat file and it will execute all the .sql files in that folder. It will write the errors (if any) into a file called output.txt
Check out the image below for a sample scenario
To execute queries one by one in any order you want, use this
@echo off
ECHO %USERNAME% started the batch process at %TIME% >output.txt
sqlcmd.exe -S servername -E -d DatabaseName -i SQLQuery1.sql>>output.txt
sqlcmd.exe -S servername -E -d DatabaseName -i SQLQuery2.sql>>output.txt
pause
Hi, where do i run this bat file. In the server?
ReplyDeleteHi,
ReplyDeletePlace the bat file in the same folder as where your sql scripts reside. All the bat file does, is that it runs all the sql scripts in the folder that the bat file resides in.
Let me know if that helps.
Also I added an image in the article, see if that helps :)
ReplyDeleteThanks! this is helpful
ReplyDeleteGlad I could be of some help :)
ReplyDeleteThis is so brilliant and simple it makes me want to cry. Well maybe not cry, but thank you its really cool!
ReplyDeleteThank you Lee :)
ReplyDeleteThank you for the post, This is really nice! but is there a way to order it in ascending numbers? Because now i have scripts 1.sql,2.sql...10.sql,11.sql... and if i do it like this it will execute 10.sql before 2.sql
ReplyDeleteOtherwise I guess I will just have to rename my 2000+ sql-files
Thank you for your question. I think there should be a way to convert the file name to and integer and then go through that list in an ascending order. However I myself have never done that before. One thing you could do is write a simple C# program to rename all file names to 4 characters. Then 2.sql would become 0002.sql. Doing that would be a lot easier and faster than manually renaming 2000 of them!
DeleteAdd this as the first line inside your loop
ReplyDeleteecho Executing %%f>>output.txt
Can you use that to generate dacpac queries without specifying the database name. I asked that because dacpac scripts includes what database they should run against
ReplyDeleteThank you! very helpful.
ReplyDeleteI wanted to run on a local db. Just removed the "-S servername" parameter and worked like a charm
I want to know whether script got executed successfully or not as this BAT file giving only when errors occurred. Please suggest on this.
ReplyDeleteThank you! This script is very much helpful and could save me from lot of manual script execution.
ReplyDeleteCould you please let me know how to stop the execution if any of the script fails and want to know how to get the output message as command completed successfully after script execution