Zmienne w Transact-SQL

Wprowadzenie do zmiennych w Transact-SQL

Język T-SQL w odróżnieniu od części innych języków programowania, wymaga jawnej deklaracji zmiennych. Każda zmienna w Transact-SQL musi mieć także przypisany typ danych.  Zmienną w Transact-SQL może być też tabela lub tzw. kursor, a więc nie ograniczamy się do liczb, tekstów i dat. Deklarując zmienną rezerwujesz miejsce w pamięci komputera na czas działania programu. To ile miejsca jest zarezerwowane zależy od typu danych zmiennej oraz często też od wielkości danych.

Nazewnictwo zmiennych w Transact-SQL

Samo nazewnictwo zmiennych w Transact-SQL zależy od użytkownika. W  tym kursie będziemy korzystać z tzw. notacji wielbłądziej zapisując zmienne @wTakiejPostaci. Dodatkowo jako prefix zmiennej warto wstawić skrót typu danych, by kod był zrozumiały dla innych użytkowników. Same nazwy zmiennych będziemy zapisywali w języku angielskim, choć nie jest to konieczność.  W nazwie zmiennych możesz także użyć znaku dolnego podkreślenia _. To, czy używasz małych czy wielkich lister zależy od Ciebie.

Deklaracja zmiennych w T-SQL

Jak deklarować zmienne w Transact-SQL? Zmienne w Transact-SQL deklarowane są jawnie za pomocą polecenia DECLARE, wprowadzenia nazwy zmiennej poprzedzonej znakiem @ oraz ustalenia typu danych dla zmiennej zakończonego średnikiem. Dla przykładu, jeśli chcesz do swojego programu wprowadzić dwie zmienne, liczbową o nazwie zmienna1 i typie int oraz tekstową o nazwie zmienna2 i o typie tekstowym varchar(max), zapisujesz to w następujący sposób:

--tomaszkenig.pl
DECLARE @zmienna1 int;
DECLARE @zmienna2 varchar(max);

Jak widzisz każdą zmienną poprzedzamy frazą DECLARE. Po dokonaniu deklaracji zmienne możesz już wykorzystywać w dalszej części programu. W powyższy sposób deklarowane są zmienne lokalne. Działają one w obrębie wykonywanego w danym momencie programu. W języku T-SQL występują także zmienne globalne, które są zadeklarowane przez mechanizm SQL Server. Zmienne globalne w SQL Server są poprzedzone dwoma znakami @@. Zmiennych globalnych w SQL Server nie możemy definiować. Najważniejsze zmienne globalne w SQL Server poznasz w następnych częściach kursu Transact-SQL.

Przypisywanie wartości do zmiennych w T-SQL

Kolejnym krokiem po dokonaniu deklaracji zmiennych jest przypisanie do nich wartości. Możesz to zrobić na dwa proste sposoby. Pierwszym sposobem jest przypisanie wartości do zmiennej za pomocą polecenia SET. Przypisania wartości dokonuje się po zadeklarowaniu. Na poniższym przykładzie dodatkowo wartość zmiennej została wyświetlona w oknie Messages za pomocą polecenia print.

--tomaszkenig.pl
DECLARE @zmienna1 int;
DECLARE @zmienna2 varchar(max);

SET @zmienna1 = 123;
SET @zmienna2 = 'Dowolny tekst';

print @zmienna1;
print @zmienna2;
Kurs SQL Server - Deklaracja zmiennych w Transact-SQL.
Kurs SQL Server – Deklaracja zmiennych w Transact-SQL.

Możesz także przypisać wartość do zmiennej w T-SQL podczas jej deklaracji, wprowadzając wartość po znaku równości za typem danych. Przykład poniżej:

--tomaszkenig.pl
DECLARE @zmienna1 int=123;
DECLARE @zmienna2 varchar(max)='Dowolny tekst';

print @zmienna1;
print @zmienna2;
Kurs SQL Server - Przypisanie wartości do zmiennej.
Kurs SQL Server – Przypisanie wartości do zmiennej.

Możesz także przypisać wartości do zmiennych bezpośrednio z danych ujętych w tabelach lub widokach za pomocą polecenia SQL Select. Ważne jest, by wynikiem polecenia SQL był w tym przypadku tylko jeden rekord zawierający jedną kolumnę. Polecenie SQL należy umieścić w nawiasach. Przykład na danych z bazy NorthWind poniżej.

--tomaszkenig.pl
use Northwind
go

DECLARE @varProductName varchar(255);
DECLARE @floUnitPrice float;

SET @varProductName = (select ProductName from dbo.Products where ProductID=1);
SET @floUnitPrice = (select UnitPrice from dbo.Products where ProductID=1)

print 'Nazwa produktu to: ' + @varProductName;
print 'Cena produktu to: ' + CAST(@floUnitPrice AS VARCHAR(MAX));

W ten sposób pobrane zostały dane z jednego rekordu o id=1. Wartości z dwóch kolumn zostały przypisane do zmiennych. Następnie wartości zostały wyświetlone. Funkcja CAST w poleceniu Print służy do zamiany typu danych na typ znakowy varchar. W innym wypadku SQL Server zwróciłby błąd mówiący o niezgodności typów danych.

Kurs SQL Server - Zmienne w Transact-SQL
Kurs SQL Server – Zmienne w Transact-SQL

Masowe przypisanie danych do zmiennych

W poprzednim punkcie pokazałem, w jaki sposób można przypisać dane z tabeli lub widoku SQL Server do zmiennych. W Transact-SQL istnieje jeszcze kilka sposobów, w jakie możemy to zrobić. Jednym ze sposobów jest użycie tzw. kursorów o których dowiesz się w kolejnych częściach kursu Transact-SQL. Najlepszym i najszybszym sposobem jest jednak przypisanie danych do zmiennych z polecenia SQL bezpośrednio w poleceniu SQL Select. Do przypisania stosujmy jedynie znak równości i nazwę zmiennej, która ma otrzymać wartość. Przykład zamieszczam poniżej:

--tomaszkenig.pl
use Northwind
go

DECLARE @varProductName varchar(255);
DECLARE @floUnitPrice float;

SELECT  
@varProductName = ProductName,
@floUnitPrice = UnitPrice 
FROM dbo.Products 
WHERE ProductID=1;

print 'Nazwa produktu to: ' + @varProductName;
print 'Cena produktu to: ' + CAST(@floUnitPrice AS VARCHAR(MAX));
Kurs SQL Server - Zmienne w T-SQL
Kurs SQL Server – Zmienne w T-SQL

Operacje na zmiennych w T-SQL

W momencie, gdy zmienne mają już przypisane wartości możemy na nich wykonywać dowolne działania. Najprostszym przykładem jest wyświetlenie wartości zmiennej w oknie Messages za pomocą polecenia print, które poznałeś w poprzednim punkcie. Na zmiennych możesz także dokonywać dowolnych operacji za pomocą funkcji języka SQL używanych w SQL Server. Pamiętaj, że zawsze po zadeklarowaniu zmiennej, przypisanie i zmiana wartości następuje za pomocą polecenia SET.

Poniżej prosty przykład. Za pomocą Transact-SQL pobieramy z tabeli bazy NorthWind jeden rekord, a następnie przypisujemy wartości kolumn rekordu do zmiennych. Na zmiennych wykonujemy operacje zmieniając wartości. Na sam koniec wyświetlamy dane zmodyfikowanego rekordu. Jak widzisz dane możemy zmodyfikować zarówno przed jak i po przypisaniu ich do zmiennych.

use Northwind
go

DECLARE @varProductName varchar(255);
DECLARE @floUnitPrice float;
DECLARE @varQuantityPerUnit varchar(255);

Select  
@varProductName = upper(ProductName),
@floUnitPrice = UnitPrice,
@varQuantityPerUnit = QuantityPerUnit
from dbo.Products 
where ProductID = 7;

print 'Nazwa produktu to: ' + @varProductName;
print 'Cena produktu to: ' + CAST(@floUnitPrice AS VARCHAR(MAX));
print 'Ilość jednostek: ' + LOWER(@varQuantityPerUnit)
Kurs SQL Server - Operacje na zmiennych T-SQL
Kurs SQL Server – Operacje na zmiennych T-SQL

Zadania (Rozwiązanie możesz wpisać w komentarzu)

  1. Pobierz jeden rekord danych z tabeli Employees w bazie NorthWind, następnie przypisz jego wartości do zmiennych i wyświetl za pomocą polecenia print.
  2. Zmodyfikuj powyższy przykład tak, aby dane wyświetlone zostały jako ciąg znaków za pomocą jednego polecenia print.
  3. Zmodyfikuj pierwszy przykład. Na każdej danej zastosuj dowolną funkcję przed i po przypisaniu danych do zmiennej. Następnie wyświetl wynik za pomocą polecenia print.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

3 komentarze “Zmienne w Transact-SQL”