Wywoływanie skryptów SQL używając Powershell – nomesscode / Executing SQL database scripts with Powershell

PL

Wstęp

Powershell to, zgodnie z definicją znajdującą się w dokumentacji na stronie Microsoft, open-source owe, czyli ogólnodostępne narzędzie – interpretator komend lub też powłoka linii komend oraz dodatkowo język skryptowy.

Powershell to taka alternatywa dla klasycznego windows’owego cmd, czyli command line, natomiast też zgodnie z powyżej podaną definicją, jest znacznie bardziej rozbudowany.

Powłoki powershell można używać z poziomu klasycznej linii komend Powershell, czyli Windows Powershell, ale także możemy skorzystać z Windows Powershell ISE, czyli Integrated Scripting Environment, gdzie nie tylko możemy wprowadzać komendy i wywoływać konkretne skrypty, ale też edytować je, wykonywać tylko zaznaczone skrypty, a co najważniejsze – można w jego obrębie debugować skrypty i korzystać z kolorowanej składni języka. O wielu innych jeszcze możliwościach możecie poczytać na stronie Microsoft’u.

Połączenie z bazą danych

A po kilku słowach wstępu czas na implementację połączenia z lokalną bazą danych SQL oraz uruchomienie na niej prostej kwerendy.

Kwerenda będzie SELECT’em z tabeli TestTable zawierającej id oraz jedno pole typu nvarchar. Kwerenda umieszczona w pliku sql_script.sql przedstawia się następująco:

W tabeli umieściłem wcześniej jeden rekord zawierający Id równe 1 oraz Name równe nomesscode, także takiego wyniku się spodziewamy.

Najpierw otwieramy Windows Powershell ISE – wystarczy, że wpiszecie w szukajkę programów Windows frazę ,,powershell” i powinna pojawić się jasnoniebieska ikona Windows Powershell ISE. Ja używam Windows 10 i nie jestem pewien w jakich wersjach Windows program ten jest domyślnie instalowany, jeśli go nie macie, możecie napisać skrypt w notepad++ i zapisać go z rozszerzeniem .ps1.

Parametry

Definiujemy parametry naszego skryptu:

W naszym przypadku będzie to ScriptPath odpowiadający za dostarczenie ścieżki skryptu sql jaki będziemy uruchamiać na naszej lokalnej bazie danych, ServerInstance określający nazwę serwera dla lokalnej bazy danych oraz DatabaseName określający nazwę naszej lokalnej bazy danych.

Wykomentowane parametry są opcjonalne – ja loguję się do bazy danych za pomocą poświadczeń domeny Windows, czyli opcji Windows Authentication w SQL Server Management Studio, ale jeśli logujecie się jakimś użytkownikiem lokalnej bazy danych sql – to właśnie z tych parametrów nich musicie skorzystać.

Następnie piszemy kilka linijek informujących użytkownika co aktualnie dzieje się w skrypcie, wypisujemy na ekran następujące informacje:

Wywołanie kwerendy

Ostatni krok jest najważniejszy, wykorzystujemy istniejącą już metodę Invoke-SqlCmd aby wywołać kwerendę na lokalnej bazie danych w następujący sposób:

Zauważcie, że wywołanie metody w Powershell ma specyficzną składnię, po jej nazwie wymieniamy parametry poprzedzone myślnikiem. Następnie określamy ich wartości – w naszym przypadku po prostu przekazujemy parametry naszego skryptu poprzedzone symbolem $.

Cały skrypt wygląda następująco:

Folder z skryptem Powershell oraz skryptem sql przedstawia się następująco:

Aby go wywołać skrypt możemy teraz użyć klasycznej linii komend  Powershell, czyli Windows Powershell, ale ja zostanę w Windows Powershell ISE i wywołam skrypt w linii komend dostępnej poniżej.

Wywołanie wygląda następująco:

Rezultaty

Efektem wywołania kwerendy jest rekord z tabeli TestTable, który został wypisany na konsoli.

Z powodów prywatności musiałem zakreślić kilka rzeczy, ale wszystko inne jest czytelne – przy wywołaniu skryptów wpisujecie całą ścieżkę, która do niego prowadzi, a potem podajecie – podobnie jak przy wywołaniu wcześniej omawianej metody – parametry poprzedzone myślnikami wraz z ich wartościami.

Każdy poszczególny parametr przeniosłem w wywołaniu do nowej linii na potrzeby czytelności, zrobiłem to używając mało widocznego na screenshot’cie symbolu ,,`„, czyli takiego odwróconego pojedynczego apostrofu (eng. backtickbackquote).

W naszym przypadku parametrami będą, omawiane wcześniej: pełna ścieżka prowadząca do pliku ze skryptem sql. Następnie pełna nazwa serwera na której znajduje się lokalna baza danych – znajdziecie go przy logowaniu się do SQL Server Management Studio oraz pełna nazwa bazy danych – także znajdziecie ją w widoku SQL Server Management Studio po zalogowaniu na swój serwer.

Podsumowanie

Jak widzicie przy pomocy Powershell można zrobić naprawdę wiele rzeczy, nie tylko wywoływać proste skrypty SQL, ale np. wywoływać procedury składowane znajdujące się na lokalnej bazie danych albo tworzyć pakiety instalacyjne jako pojedyncze skrypty migrujące dane na lokalną bazę danych SQL. Za pomocą Powershell można zrealizować mnóstwo funkcjonalności niezwiązanych z bazami danych ale samym systemem.

Wróć na stronę startową

ENG

Introduction

Powershell, according to the Microsoft’s definition, is open-sourced tool – task-based command line shell and also scripting language.

Powershell is alternative to the classic windows cmd, which is command line, however according also to the abovementioned definition, is more way complex.

Powershell can be used within mentioned class command line, which is Windows Powershell, also it can be used with Windows Powershell ISE, which is Integrated Scripting Environment where not only we can type commands and execute scripts but also edit them, execute only marked fragments, and what is the most important thing, debug and use colored syntax of Powershell scripting language. About many others possibilities offered by Windows Powershell ISE you can read on Microsoft’s site.

Connection with a database

After couple word of introduction it is time for implementation the connection with the local SQL database and executing a simple query.

Query will be a SELECT query affecting TestTable containing only two fields: Id and Name which is of nvarchar type. Query is placed in sql_script.sql and it looks like this:

I have inserted into the table one record containing Id equaling 1 and Name equaling nomesscode, according to this we except such result.

Firstly, we open Windows Powershell ISE – it is sufficient to type “powershell” in the search bar of windows programs and light blue icon of Windows Powershell ISE should appear. I use Windows 10 and I’m not sure in which Windows systems version Powershell is fabric installed, but if it is not installed, you can just type script that we are gonna to implement in notepad++ with .ps1 extension.

Parameters

We define parameters of our script:

In our case they will be ScriptPath responsible for delivering sql script’s path which we are going to execute on the local database, ServerInstance defining name of the server where the local database exists and DatabaseName delivering name of the local database.

Commented paramteres are optional – I personally log into database using windows domain’s credentials, so Windows Authentication option within SQL Server Management Studio but if you log in using some local database’s user then you should use exactly these parameters.

Next we write couple lines concerning information about what actually is happening in our script and we write out in the console the following information for the user:

Executing the query

The last step is the most important, we will use existing method Invoke-SqlCmd to invoke sql query on the local database as the follows:

Notice that invoking particular method within Powershell has specific syntax – after specifying the name of method being invoked we type its parameters preceded with dash. Then we specify values of those parameters – in our case there will be just parameters of our script preceded with $ symbol.

The whole script looks as the follows:

Folder containing exactly powershell script and sql script looks as the follows:

In order to execute the script we can use classic powershell command line, which is before mentioned Windows Powershell but I’ll stay with Windows Powershell ISE and execute the script in the command line available in the window below.

Executing presents as the follows:

Results

The result of executing the script and consequently the sql query is record from the TestTable table as we expected which was written out in the console.

Because of the privacy reasons I’ve had to mark couple things but all other things are readable – while execution of the script we type full path where the powershell script is placed and then you type – similarly to the before described method – parameters preceded with dashes and then its values.

I placed every particular parameter in the newline for the sake of readability. I did this using low-visibility in the screenshot symbol „`„, which is called backtick or backquote.

In our case parameters will be already described: full path where sql script is placed. Then full name of the server where the local database exists – you will find it while logging into SQL Server Management Studio and full name of the local database – you will also find it in SQL Server Management Studio after being logged in your server.

Summary

As you can see Powershell has plenty of applications, not only that concerning exeuting simple sql scripts, but also e.g. executing stored procedures existing on the local sql database or creating install packages as the singular scripts responsible for migration of the data into the local sql database. With Powershell it is possible to develop plenty of solutions not related with the databases but with system.

Get back to Home Page

1 komentarz do wpisu “Wywoływanie skryptów SQL używając Powershell – nomesscode / Executing SQL database scripts with Powershell

  1. Pingback: dotnetomaniak.pl

Dodaj komentarz