Πώς μπορούμε να εκτελέσουμε πολλαπλά SQL Scripts στον SQL Server μέσα από τα Windows με batch script

Πώς μπορούμε να εκτελέσουμε πολλαπλά SQL Scripts στον SQL Server μέσα από τα Windows με batch script
Πώς μπορούμε να εκτελέσουμε πολλαπλά SQL Scripts στον SQL Server μέσα από τα Windows με batch script

Σε αυτό το άρθρο θα δούμε έναν εύκολο τρόπο για να μπορούμε να εκτελέσουμε μαζικά SQL Scripts στον SQL Server με batch script και να κρατήσουμε ξεχωριστά τα αποτελέσματα για το καθένα σε CSV.

Το παράδειγμα

Έστω ότι έχουμε πολλαπλά scripts που θέλουμε να τρέξουν στη βάση AdventureWorks2019 και κάποια στην StackOverflow2013.

Το μόνο που χρειάζεται να έχουμε κάνει σαν προετοιμασία είναι, να τα έχουμε βάλει το κάθε script σε φάκελο που θα έχει το όνομα της βάσης που θέλουμε να τρέξει ανά περίπτωση και να τα έχουμε ονομάσει με αριθμό στην αρχή έτσι ώστε να είναι σε σειρά:

Πώς μπορούμε να εκτελέσουμε πολλαπλά SQL Scripts στον SQL Server μέσα από τα Windows με batch script
01

Μέσα στον φάκελο με το όνομα της βάσης που περιέχει τα scripts προσθέτουμε και το batch script (sqlcmd_batch_script.cmd) που θα δούμε παρακάτω τι πρέπει να περιέχει:

Πώς μπορούμε να εκτελέσουμε πολλαπλά SQL Scripts στον SQL Server μέσα από τα Windows με batch script
02

Στο πρώτο script για το παράδειγμα ζητάμε να μας φέρει το όνομα του server, το όνομα της βάσης και τους πίνακες που περιέχει:

Πώς μπορούμε να εκτελέσουμε πολλαπλά SQL Scripts στον SQL Server μέσα από τα Windows με batch script
03

Τώρα με διπλό κλικ στο batch script (sqlcmd_batch_script.cmd) θα μας εμφανιστεί το command window και θα δούμε να εκτελεί ένα ένα τα scripts με sqlcmd:

Πώς μπορούμε να εκτελέσουμε πολλαπλά SQL Scripts στον SQL Server μέσα από τα Windows με batch script
04

Όταν ολοκληρωθεί θα δούμε ότι στον ίδιο φάκελο θα έχει εξάγει σε CSV ξεχωριστά τα αποτελέσματα για το καθένα:

Πώς μπορούμε να εκτελέσουμε πολλαπλά SQL Scripts στον SQL Server μέσα από τα Windows με batch script
05

Αν ανοίξουμε το πρώτο CSV με τα αποτελέσματα του πρώτου script, θα δούμε ότι μας αποθήκευσε τα αποτελέσματα του select που ζητήσαμε με το server name, το όνομα της βάσης και τους πίνακες που περιέχει:

Πώς μπορούμε να εκτελέσουμε πολλαπλά SQL Scripts στον SQL Server μέσα από τα Windows με batch script
06

Ο κώδικας

Ας δούμε τώρα βήμα βήμα τι πρέπει να περιέχει το batch script (sqlcmd_batch_script.cmd) και τι παραμέτρους ορίζουμε.

Για αρχή κρατάμε το full path για κάθε αρχείο που υπάρχει στον φάκελο και ορίζουμε την μεταβλητή dbname να πάρει το όνομα του φακέλου (που θα είναι το ίδιο με το όνομα της βάσης που θέλουμε να τρέξει):

CD /d "%~dp0"

for %%I in (.) do set dbname=%%~nI

Στη συνέχεια ορίζουμε το τύπο του αρχείου που θέλουμε να εξαχθούν τα αποτελέσματα και τον delimiter που θέλουμε να έχει. Στην περίπτωση μας, διαλέγουμε CSV και comma για delimiter ώστε όταν το ανοίξουμε να είναι ήδη χωρισμένο σε κολώνες:

set filetype=.csv
set delimiter=,

Στο επόμενο βήμα ορίζουμε το όνομα του server με την πόρτα, το username και τo password με το οποίο θα τρέξει (αν κάναμε χρήση Active Directory login θα έπρεπε οι παράμετροι user και pass να έχουν αφαιρεθεί):

set instance=SMATZOURANISLP,1433
set user=stratos
set pass=password

Μπορούμε στο script να έχουμε και δεύτερο instance και να τρέχει στο ανάλογο instance αναλόγως το όνομα της βάσης:

set instance2=SMATZOURANISLP\INSTANCE2,1533
set user2=stratos
set pass2=password

Σε αυτή τη περίπτωση ορίζουμε πότε θα συνδεθεί στο πρώτο instance και πότε στο δεύτερο:

IF "%dbname%"=="StackOverflow2013" GOTO instance1
IF "%dbname%"=="AdventureWorks2019" GOTO instance1
 

IF "%dbname%"=="StackOverflow2016" GOTO instance2

GOTO End1

Ανάλογα λοιπόν θα πάει στο κομμάτι του κώδικα για το instance1:

:instance1


for %%G in (*.sql) do sqlcmd /S "%instance%" /d "%dbname%" -U "%user%" -P "%pass%" -i"%%G" -b -s"%delimiter%" -W -o "%%G%filetype%"

GOTO End1

ή το instance2:

:instance2

for %%G in (*.sql) do sqlcmd /S "%instance2%" /d "%dbname%" -U "%user2%" -P "%pass2%" -i"%%G" -b -s"%delimiter%" -W -o "%%G%filetype%"

GOTO End1


:End1

pause

Ο κώδικας του script όλος μαζί

Στο τέλος το batch script (sqlcmd_batch_script.cmd) θα πρέπει να έχει αυτή τη μορφή:

CD /d "%~dp0"


for %%I in (.) do set dbname=%%~nI
set filetype=.csv
set delimiter=,


set instance=SMATZOURANISLP,1433
set user=stratos
set pass=password


set instance2=SMATZOURANISLP\INSTANCE2,1533
set user2=stratos
set pass2=password



IF "%dbname%"=="StackOverflow2013" GOTO instance1
IF "%dbname%"=="AdventureWorks2019" GOTO instance1
 

IF "%dbname%"=="StackOverflow2016" GOTO instance2


GOTO End1


:instance1


for %%G in (*.sql) do sqlcmd /S "%instance%" /d "%dbname%" -U "%user%" -P "%pass%" -i"%%G" -b -s"%delimiter%" -W -o "%%G%filetype%"

GOTO End1


 
:instance2

for %%G in (*.sql) do sqlcmd /S "%instance2%" /d "%dbname%" -U "%user2%" -P "%pass2%" -i"%%G" -b -s"%delimiter%" -W -o "%%G%filetype%"

GOTO End1


:End1

pause

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση