Do you make use of SQL Server? Do some teams or DBAs still manage deployments by hand? Are project or financial constraints preventing the incorporation of CI/CD tools? However, there's a chance to use more than one SQL script.
Overview
Running SQL scripts is a standard procedure in database management. But handling several SQL files might make the procedure tiresome and time-consuming. Batch scripts are one of the ways that SQL Server offers for executing SQL scripts. We will examine how to effectively use a batch script to run several SQL files in SQL Server in this article.
Understanding Batch Scripting
Batch scripting is a powerful tool for automating tasks in Windows environments. It allows users to execute a series of commands or scripts in a sequential manner. These scripts are saved with a .bat extension and can be run by simply double-clicking them or through the command line.
Pre-requisite for Batch File
This script deploys all the .sql files present in a directory or sub-directories in an order.
NO SPACE in .sql file name.
NO SPACE in sub-directories.
To execute .sql in order, add a numeric sequence as follows:
createtable.sql
insertdata.sql
execstoredproc....etc.
Specify the SERVERNAME, which is mandatory.
DATABASENAME is optional (Commented-out). In case enabling add (-d%dbname%) after -E at line like (SQLCMD -S%SERVERNAME% -E -d%dbname% -b -i%%G >> :: :: %logfilepath%).
Specify the SCRIPTLOCATION, which is mandatory.
The execution log will be captured on the same SCRIPTLOCATION for successful execution and failure.
Steps to Follow
- Copy the below batch script and save it as "ExecuteSQLFiles.bat".
- Update SERVERNAME, SCRIPTLOCATION, and LOGLOCATION accordingly for your needs.
:: Pre-requisites to follow
:: This script deploys all the .sql files present in a directory or sub-directories in an order.
:: NO SPACE in .sql file name.
:: NO SPACE in sub-directories.
:: To execute .sql in order add numeric sequence as follows: 1.createtable.sql,
:: 2.insertdata.sql, 3.execstoredproc....etc.
:: Specify the SERVERNAME which is mandatory
:: DATABASENAME is optional (Commented-out). In case enabling add (-d%dbname%) after -E at line like
:: (SQLCMD -S%SERVERNAME% -E -d%dbname% -b -i%%G >> :: :: %logfilepath%).
:: Specify the SCRIPTLOCATION which is mandatory.
:: The execution log will be captured on the same SCRIPTLOCATION for successful execution and failure.
@echo off
setlocal enabledelayedexpansion
set SERVERNAME=LAPTOP-AOVLBDQ4
::set DATABASENAME=MyWork
set SCRIPTLOCATION=C:\Peter\AutoDepSQLFiles\SQL\
set LOGLOCATION=C:\Peter\AutoDepSQLFiles\Logs\
set hr=%time:~0,2%
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%
set logfilepath= %LOGLOCATION%\ExecutionLog_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%.log
set cmd='dir %SCRIPTLOCATION%\*.sql /b/s'
FOR /f %%G IN (%cmd%) DO (
echo ******PROCESSING %%G FILE******
echo ******PROCESSING %%G FILE****** >> %logfilepath%
SQLCMD -S%SERVERNAME% -E -b -i%%G >> %logfilepath%
IF !ERRORLEVEL! NEQ 0 GOTO :OnError
)
GOTO :Success
:OnError
echo ERROR ERROR ERROR
echo One\more script(s) failed to execute, terminating bath.
echo Check output.log file for more details
EXIT /b
:Success
echo ALL the scripts deployed successfully!!
EXIT /b
Copy the below SQL scripts into separate files in respective folders.
--File Name 1.TableCreation.sql
USE MyWork
GO
CREATE TABLE dbo.Employee (Id INT IDENTITY(1,1), Emp_Name VARCHAR(100))
--File Name 2.InsertData.sql
USE MyWork
GO
INSERT dbo.Employee
SELECT 'Peter'
UNION
SELECT 'Scott'
--File Name 3.AlterTable.sql
USE MyWork
GO
ALTER TABLE dbo.Employee ADD Email VARCHAR(200)
--File Name 4.UpdateTable.sql
USE MyWork
GO
UPDATE dbo.Employee
SET Email = '[email protected]'
WHERE Emp_Name = 'Peter'
UPDATE dbo.Employee
SET Email = '[email protected]'
WHERE Emp_Name = 'Scott'
- Execute the bat file, and upon successful completion, a log file will be generated in the Log directory.
- All SQL scripts within the folder will have been executed.
- If there are any failures, refer to the execution log for details
Folder Structure
Batch File
SQL Files
Verify The Deployment
As a part of this process, we initiated by creating an Employee table with Id and Emp_Name columns in the first file. Subsequently, we inserted two rows in the second file, followed by altering a table to include an Email column in the third script. Finally, in the fourth script, we updated the employee records to include email addresses.
In SQL Server, batch scripting offers a practical means of running numerous SQL files simultaneously. Batch scripts facilitate database management operations, increase productivity, and guarantee consistency in deployment procedures by automating the execution process. Users can efficiently handle their SQL execution demands by creating and running batch scripts by following the instructions provided in this article.
HostForLIFE.eu SQL Server 2022 Hosting
HostForLIFE.eu is European Windows Hosting Provider which focuses on Windows Platform only. We deliver on-demand hosting solutions including Shared hosting, Reseller Hosting, Cloud Hosting, Dedicated Servers, and IT as a Service for companies of all sizes.