Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

TABLE VARIABLE

Termin Definicja
TABLE VARIABLE

TABLE VARIABLE to zmienna przechowująca tymczasowy zbiór wierszy, o zakresie ograniczonym do bieżącej partii poleceń.

Table variable w języku T-SQL

Table variable, czyli zmienna tabelaryczna, jest konstrukcją języka Transact-SQL używaną w Microsoft SQL Server do przechowywania tymczasowego zestawu wierszy. Deklaruje się ją za pomocą składni DECLARE @Nazwa TABLE (...), a następnie wypełnia instrukcją INSERT, modyfikuje przez UPDATE lub DELETE i odczytu za pomocą SELECT. Zmienna otrzymuje nazwę poprzedzoną znakiem @, na przykład @Pozycje. W definicji można określić kolumny, ich typy danych, wartości domyślne, ograniczenia PRIMARY KEY, UNIQUE oraz ograniczenia CHECK.

Przykładowa deklaracja może wyglądać następująco: DECLARE @Wyniki TABLE (Id int NOT NULL PRIMARY KEY, Nazwa nvarchar(100) NOT NULL, Wartosc decimal(12,2));. Po deklaracji tabela istnieje jako zmienna dostępna w bieżącym zakresie wykonywania. Można używać jej w zapytaniach tak jak innych źródeł danych, w tym łączyć ją z tabelami stałymi za pomocą JOIN, filtrować klauzulą WHERE i sortować przez ORDER BY. Jej struktura jest określona przy deklaracji i nie służy do swobodnego zmieniania schematu w trakcie działania procedury.

Zakres życia i widoczność zmiennej tabelarycznej

Najważniejszą cechą table variable jest ograniczony zakres widoczności. Zmienna zadeklarowana w partii instrukcji, procedurze składowanej, funkcji albo bloku wykonywanym w określonym kontekście nie jest globalną tabelą bazy danych. Inne, niezależne partie poleceń nie mogą odwołać się do niej po zakończeniu zakresu, w którym została zadeklarowana. W praktyce oznacza to, że dane zapisane w @Wyniki służą do wykonania konkretnego fragmentu logiki, a nie do długotrwałego przechowywania informacji.

Table variable może być używana w procedurach składowanych i funkcjach, a także przekazywana jako parametr tabelaryczny, jeżeli zostanie oparta na wcześniej zdefiniowanym typie tabelarycznym. Po zakończeniu zakresu zmienna przestaje być dostępna dla kodu wywołującego. Nie stosuje się jej jako zamiennika tabeli permanentnej, ponieważ nie posiada trwałego schematu biznesowego, nie jest przeznaczona do współdzielenia danych między niezależnymi wykonaniami i nie zastępuje mechanizmów przechowywania danych wymaganych po zakończeniu operacji.

Transakcje, indeksowanie i plan wykonania

Zmienne tabelaryczne korzystają z zasobów tymczasowych SQL Server, mimo że ich deklaracja ma formę zmiennej. Podobnie jak inne operacje modyfikujące dane, polecenia dotyczące ich zawartości mogą być wykonywane w ramach transakcji. Trzeba jednak rozróżnić zakres życia zmiennej od zakresu transakcji: zakończenie transakcji nie oznacza automatycznie, że kod przestaje widzieć zmienną, jeśli nadal znajduje się w tym samym zakresie wykonywania. Z kolei wycofanie transakcji może cofnąć zmiany dokonane na jej wierszach.

W table variable można zdefiniować klucz główny lub ograniczenie unikalności, co pozwala uzyskać indeks wspierający wyszukiwanie i łączenie danych. Nie jest to jednak pełny odpowiednik możliwości indeksowania zwykłej tabeli tymczasowej. Wybór między zmienną tabelaryczną a tabelą tymczasową powinien uwzględniać liczbę wierszy, liczbę operacji, złożoność łączeń oraz jakość planu wykonania. Microsoft SQL Server może mieć ograniczone informacje o statystykach rozkładu danych w zmiennej tabelarycznej, dlatego przy większych zbiorach optymalizator może dobrać plan niepasujący do rzeczywistej liczności. W nowszych wersjach SQL Server dostępne są mechanizmy poprawiające estymację liczby wierszy dla wybranych zastosowań, ale nie znosi to potrzeby pomiaru zapytań i analizy planu wykonania.

Rozpoznawanie problemów z table variable

Nieprawidłowe użycie zmiennej tabelarycznej często ujawnia się jako długi czas wykonywania zapytania, nadmierne zużycie pamięci albo plan wykonania zawierający nieadekwatne operatory, takie jak wielokrotne skanowanie dużych tabel. Podczas analizy warto sprawdzić deklarację kolumn, typy danych używane w warunkach JOIN, obecność kluczy oraz liczbę wierszy faktycznie zapisanych do zmiennej. Niezgodność typów, na przykład porównywanie różnych odmian typów znakowych lub liczbowych, może powodować niejawne konwersje i ograniczać użycie indeksów po stronie łączonych tabel.

W diagnostyce zapytania w Microsoft SQL Server przydatne są rzeczywiste plany wykonania oraz pomiary czasu i odczytów logicznych, na przykład uzyskane po włączeniu SET STATISTICS TIME ON i SET STATISTICS IO ON. Należy porównać zachowanie table variable z tabelą tymczasową oznaczoną nazwą #Nazwa, ale tylko w kontrolowanym teście o identycznych danych i zapytaniach. Sama obecność zmiennej tabelarycznej nie oznacza błędu. Problem pojawia się wtedy, gdy konstrukcja jest używana do dużego, wieloetapowego przetwarzania, a ograniczona wiedza optymalizatora o zawartości prowadzi do nieefektywnego planu. W takim przypadku ocenia się osobno deklarację, sposób zasilania, indeksowanie, filtrację oraz moment odczytu danych.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę