Bazy danych wykorzystywane są wszędzie tam, gdzie zachodzi potrzeba przechowywania i przetwarzania danych. Na rynku mamy dostępnych wiele narzędzi do tworzenia i operowania na baza danych z Microsoft SQL Server, między innymi:

  • SQL Operations Studio
  • SQL Server Management Studio
  • LINQPad
  • mssql-cli
  • mssql  do VS Code

Nie wszystkie powyższe narzędzia są cross platform. W artykule skupię się na pracy z SQL Server z poziomu dystrybucji Linux (Ubuntu). Głównym bohaterem mojego wpisu będzie wtyczka mssql do wieloplatformowego edytora kodu Visual Studio Code. Do codziennej pracy nie zawsze potrzebuję instalować kombajn jak produkt z nazwą Studio od Microsoftu. Wtyczka mssql spełnia moje podstawowe wymagania, dzięki niej uzyskujemy następujące funkcje:

  • zarządzanie i tworzenie profili połączeń do Microsoft SQL Server, Azure SQL Database lub SQL Data Warehouses
  • pisanie zapytań T-SQL z wykorzystaniem IntelliSense
  • T-SQL snippet
  • kolorowanie i weryfikacja składni
  • uruchamianie skryptów i przegląd wyników w postaci tabeli
  • zapis wyników do formatu json, xlsx lub csv

Co nam będzie potrzebne do zabawy z powyższą wtyczką, oczywiście instancja SQL Server, z którym będziemy chcieli połączyć się, oraz Visual Studio Code. Czasy zmieniają się i od pewnego dnia można instalować SQL Server 2017 na dystrybucji Linux. Dla osób, które nie mają dostępu do żadnego serwera, oraz nie chcą lokalnie instalować SQL Server, zaprezentuję w kolejnym rozdziale jak uruchomić kontener SQL Server 2017 z poziomu Dockera.

Uruchomienie kontenera SQL Server 2017 w 3 krokach (Docker)

  1. Instalujemy Dockera (instrukcja instalacji).
  2. Pobieramy najnowszy obraz SQL Server 2017 Linux z repozytorium Docker Hub
sudo docker pull microsoft/mssql-server-linux:2017-latest

3. Uruchamiamy kontener SQL Server

sudo docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=TopSecret!1' -p 1433:1433 --name sql -d microsoft/mssql-server-linux:2017-latest

W ramach uruchamiania instancji obrazu przekazywane są następujące parametry:

  • -e 'ACCEPT_EULA=Y’ – ustawienie zmiennej ACCEPT_EULA na wartość Y powoduje akceptacje umowy licencyjnej wymaganej dla obrazu SQL Server
  • -e 'SA_PASSWORD=TopSecret!1′ – ustawienie hasła dla użytkownika sa zgodnego z polityka SQL Server (hasło posiada minimum 8 znaków, hasło musi zawierać duże litery, małe litery, cyfry i symbole)
  • -p 1433:1433 – mapowanie portów host:container
  • –name sql – ustawienie nazwy kontenera
  • -d microsoft/mssql-server-linux:2017-latest – wskazanie obrazu dockera

Czy kontener został uruchomiony prawidłowo możemy sprawdzić poniższą komendą.

docker ps -a

run sql server containerExtension mssql (VS Code)

Czas na instalacje pluginu mssql do Visual Studio Code. W VS Code przechodzimy do zakładki Extensions, wyszukujemy mssql, klikamy Install, a po zakończeniu instalacji klikamy Reload.

install extension mssql

Środowisko pracy gotowe, czas przejść do praktyki. Zaczniemy od stworzenia profilu połączenia do SQL Server z poziomu Visual Studio Code. W VS Code wciskamy CTRL+SHIFT+P w celu otwarcia Command Palette. Wpisując sql możemy podejrzeć dostępne mssql komendy.

sql commands

Wybieramy MS SQL:Connect, w ramach konfiguracji profilu połączenia, w następnych krokach podajemy nazwę serwera, login, hasło, nazwę profilu i zapisujemy. Jeśli udało się połączyć z serwerem na dolnej belce otrzymamy stosowną informacje.

connected

Na dzień pisania wpisu w telewizji teraz tylko Mundial, Mundial i Mundial. Wykorzystam ten fakt i stworzę bazę danych Mundial, w której będę przechowywał dane najlepszych piłkarzy. Do pisania skryptu wykorzystamy kilka dostępnych snippet-ów np. sqlCreateDatabase, sqlCreateTable i sqlInsertRows.

-- Create a new database called 'Mundial'
-- Connect to the 'master' database to run this snippet
USE master
GO
-- Create the new database if it does not exist already
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'Mundial')
CREATE DATABASE Mundial
GO

USE Mundial
GO

-- Create a new table called 'Players' in schema 'dbo'
-- Drop the table if it already exists
IF OBJECT_ID('dbo.Players', 'U') IS NOT NULL
DROP TABLE dbo.Players
GO
-- Create the table in the specified schema
CREATE TABLE dbo.Players
(

    PlayersId INT NOT NULL IDENTITY(1,1) PRIMARY KEY, -- primary key column
    FirstName [NVARCHAR](50) NOT NULL,
    LastName [NVARCHAR](50) NOT NULL,
    Nationality [NVARCHAR](50) NOT NULL,
    Height tinyint NOT NULL,
    Age tinyint NOT NULL,
    Position [NVARCHAR](50) NOT NULL,
    CurrentClub [NVARCHAR](50) NOT NULL,
    MarketValue real NOT NULL
);
GO

-- Insert rows into table 'dbo.Players'
INSERT INTO dbo.Players
( -- columns to insert data into
 [FirstName], [LastName], [Nationality], [Height], [Age], [Position], [CurrentClub], [MarketValue]
)
VALUES
( 'Jan', 'Kowalski', 'Poland', 185, 21, 'Left Wing', 'DRY Opole' , 1.2),
( 'Marian', 'Lewandowski', 'Poland', 160, 29, 'Centre-Forward', 'SOLID Warszawa' , 100.0),
( 'Adam', 'Peszkin', 'Poland', 185, 32, 'Left Wing', 'KISS Gdynia' , 2.3),
( 'Olaf', 'Majka', 'Poland', 210, 17, 'Keeper', 'YAGNI Gliwice' ,32.2)
GO

Zamieszczony powyżej skrypt T-SQL w VS Code możemy wykonać poprzez wciśnięcie klawiszy CTRL + SHIFT + E. Baza danych z tabelą utworzona, spróbujmy wyciągnąć podstawowe informacje (imię, wiek, klub) o naszych piłkarzach z tabeli.

select SQL

Wyniki otrzymanego zapytania prezentowane są w postaci tabelarycznej. Istnieje możliwość zapisu wyników do jednego z trzech formatów csv, json i xlsx (excel).

Podsumowanie

W artykule przedstawiłem możliwość zarządzania bazą danych z poziomu Visual Studio Code z wykorzystaniem wtyczki mssql.  Przyznajcie, że trudne to nie jest, zachęcam do przejrzenia także innych wtyczek z VS Studio, w wielu przypadkach ułatwiają codzienną prace z edytorem kodu. Do końca Czerwca pojawi się jeszcze jeden wpis z tematyki testowania, zachęcam do śledzenia na Twitterze i odwiedzin bloga.