50 najpopularniejsze pytania i odpowiedzi na rozmowie kwalifikacyjnej T-SQL (2026)

Pytania i odpowiedzi na rozmowę kwalifikacyjną T-SQL

Przygotowujesz się do rozmowy kwalifikacyjnej T-SQL? Czas pogłębić swoją wiedzę na temat tego, jak bazy danych naprawdę działają pod powierzchnią. Pytania do rozmowy kwalifikacyjnej T-SQLRekruterzy oceniają nie tylko znajomość składni, ale także umiejętność manipulowania danymi, ich optymalizacji i logicznego strukturyzowania.

Możliwości w tej dziedzinie stale rosną, ponieważ firmy polegają na wnioskach opartych na danych. Kandydaci z silną wiedzą techniczną, umiejętnościami analitycznymi i umiejętnością rozwiązywania rzeczywistych problemów wyróżniają się – zarówno nowicjusze, jak i specjaliści z 5–10-letnim doświadczeniem. Zrozumienie pytań i odpowiedzi na poziomie podstawowym i zaawansowanym pomaga liderom zespołów, menedżerom i starszym pracownikom technicznym zidentyfikować silne umiejętności SQL i doświadczenie na poziomie podstawowym.

Nasz przewodnik powstał w oparciu o spostrzeżenia ponad 65 menedżerów ds. rekrutacji, ponad 40 starszych programistów i specjalistów ds. danych z różnych branż, zapewniając kompleksowy zakres zagadnień – od podstawowej logiki SQL po zaawansowane techniki optymalizacji, którym ufają liderzy techniczni na całym świecie.
Czytaj więcej ...

👉 Bezpłatne pobieranie pliku PDF: Pytania i odpowiedzi na rozmowę kwalifikacyjną z języka T-SQL

Najważniejsze pytania i odpowiedzi na rozmowie kwalifikacyjnej dotyczące języka T-SQL

1) Czym jest T-SQL i czym różni się od standardowego SQL?

Transact-SQL (T-SQL) to Microsoftzastrzeżone rozszerzenie języka SQL, używane głównie z Microsoft SQL ServerRozszerza standardowy SQL poprzez wprowadzenie funkcji programowania proceduralnego, takich jak zmienne, warunki, pętle, obsługa błędów i funkcje wbudowane. Podczas gdy standardowy SQL koncentruje się na manipulacji danymi (SELECT, INSERT, UPDATE, DELETE), T-SQL obsługuje instrukcje sterowania przepływem (IF…ELSE, WHILE), obsługę transakcji oraz funkcje systemowe, które umożliwiają programistom pisanie złożonych skryptów.

WYGLĄD SQL T-SQL
Własność Norma ANSI/ISO Microsoft
Logika proceduralna Ograniczony Obsługiwane (zmienne, pętle)
Obsługa błędów minimalny TRY…CATCH obsługiwany
Pierwsze użycie Ogólne bazy danych SQL Server

Przykład:

DECLARE @count INT = 5;
WHILE @count > 0
BEGIN
    PRINT @count;
    SET @count -= 1;
END;

2) Wyjaśnij różne typy połączeń w języku T-SQL na przykładach.

Złączenia w języku T-SQL łączą wiersze z dwóch lub więcej tabel na podstawie powiązanych kolumn. Zrozumienie ich typów jest kluczowe w przypadku zapytań dotyczących danych relacyjnych.

Typ połączenia OPIS Przykładowa składnia
INNER JOIN Zwraca tylko pasujące wiersze SELECT * FROM A INNER JOIN B ON A.id = B.id;
LEFT JOIN Wszystko od lewej + pasujące od prawej SELECT * FROM A LEFT JOIN B ON A.id = B.id;
WŁAŚCIWE DOŁĄCZENIE Wszystko od prawej + pasujące od lewej SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
PEŁNE DOŁĄCZENIE Łączy LEWĄ + PRAWĄ SELECT * FROM A FULL JOIN B ON A.id = B.id;
KRZYŻ DOŁĄCZ Produkt kartezjański SELECT * FROM A CROSS JOIN B;

Praktyczny przykład: Łączący Orders oraz Customers aby dowiedzieć się, którzy klienci złożyli zamówienia za pomocą INNER JOIN.


3) Czym są wyrażenia CTE (Common Table Expressions) i jakie są ich zalety?

Wspólny zestaw tabelaryczny (CTE) zapewnia tymczasowy nazwany zestaw wyników, do którego można odwoływać się w SELECT, INSERT, UPDATElub DELETE oświadczenie. Poprawia czytelność i upraszcza zapytania rekurencyjne.

Zalety:

  • Poprawia przejrzystość i konserwację zapytań.
  • Włącza rekurencję (dla danych hierarchicznych, takich jak schematy organizacyjne).
  • Pomaga uniknąć powtarzających się podzapytań.
  • Zwiększa modułowość w dużych skryptach.

Przykład:

WITH EmployeeCTE AS (
    SELECT EmpID, EmpName, ManagerID
    FROM Employees
)
SELECT * FROM EmployeeCTE WHERE ManagerID IS NULL;

4) Czym różnią się tabele tymczasowe i zmienne tabelowe w języku T-SQL?

Oba służą do przechowywania wyników pośrednich, ale ich zachowanie i zakres różnią się znacząco.

Cecha Tabela tymczasowa (#Temp) Zmienna tabeli (@TableVar)
Przechowywane w TempDB Pamięć (z ograniczonym wykorzystaniem TempDB)
Zakres transakcyjny Śledzi transakcje Niezależny od transakcji
Indeksy Utrzymany Ograniczony
Wydajność Lepiej dla dużych zestawów danych Lepiej dla małych zestawów danych

Przykład:

DECLARE @TableVar TABLE (ID INT, Name NVARCHAR(50));
INSERT INTO @TableVar VALUES (1, 'Alice');

Używaj tabel tymczasowych podczas pracy z dużymi zbiorami danych lub gdy wymagane są indeksy.


5) Wyjaśnij koncepcję transakcji w języku T-SQL i ich cykl życia.

Transakcja w języku T-SQL zapewnia, że ​​sekwencja operacji jest wykonywana jako pojedyncza jednostka logiczna. Cykl życia obejmuje: ROZPOCZNIJ TRANSAKCJĘ, POPEŁNIĆ, COFNIĘCIE.

STAGE OPIS
ROZPOCZNIJ TRANSAKCJĘ Rozpoczyna transakcję
ZATWIERDŹ TRANSAKCJĘ Zapisuje wszystkie zmiany na stałe
WYCOFANIE TRANSAKCJI Cofa wszystkie operacje od ostatniego BEGIN

Przykład:

BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 100 WHERE AccID = 1;
UPDATE Accounts SET Balance = Balance + 100 WHERE AccID = 2;
COMMIT TRANSACTION;

Jeżeli w trakcie wystąpi błąd, ROLLBACK zachowuje integralność danych.


6) Jaka jest różnica pomiędzy poleceniami DELETE, TRUNCATE i DROP?

Command Funkcjonować Wycofywanie Wpływa na strukturę Prędkość
DELETE Usuwa określone wiersze Tak Nie Wolniej
ŚCIĘTY Usuwa wszystkie wiersze Nie (zwykle) Nie pompatyczność
DROP Usuwa całą tabelę Nie Tak Najszybszy

Przykład:

DELETE FROM Employees WHERE Department = 'HR';
TRUNCATE TABLE TempData;
DROP TABLE OldLogs;

Zastosowanie DELETE do selektywnego usuwania, TRUNCATE do czyszczenia i DROP aby całkowicie usunąć tabelę.


7) Jak działa obsługa błędów w języku T-SQL?

Język T-SQL zapewnia ustrukturyzowaną obsługę błędów poprzez TRY...CATCH blok, umożliwiający programistom sprawne zarządzanie błędami w czasie wykonywania.

Przykład:

BEGIN TRY
    INSERT INTO Employees VALUES (1, 'John');
END TRY
BEGIN CATCH
    PRINT 'Error: ' + ERROR_MESSAGE();
END CATCH;

To podejście izoluje wadliwą operację i zapobiega naruszeniu integralności danych przez transakcję. Programiści mogą również uzyskać dostęp do funkcji systemu, takich jak ERROR_NUMBER() or ERROR_SEVERITY() do celów diagnostycznych.


8) Jakie są różne sposoby optymalizacji wydajności zapytań T-SQL?

Optymalizacja obejmuje precyzyjne dostrajanie projektu SQL, indeksowania i strategii wykonywania.

Kluczowe techniki:

  1. Zastosowanie właściwe indeksowanie w często wyszukiwanych kolumnach.
  2. Uniknąć SELECT * — wyraźnie określ kolumny.
  3. Zastosowanie operacje oparte na zbiorach zamiast kursorów.
  4. Analizuj plany wykonania przy użyciu SQL Server Management Studio.
  5. Zastosowanie Łączy się wydajnie przy odpowiednich warunkach ON.
  6. Zredukować zagnieżdżone podzapytania; preferuj CTE lub tabele tymczasowe.

Dostrajanie wydajności w języku T-SQL obejmuje również monitorowanie statystyk wykonywania zapytań za pomocą SET STATISTICS IO ON.


9) Czym są funkcje okna i kiedy należy ich używać?

Funkcje okienkowe wykonują obliczenia na zestawie wierszy powiązanych z bieżącym wierszem, bez łączenia ich w jeden wynik. Są przydatne do tworzenia rankingów, sum bieżących i średnich kroczących.

Przykład:

SELECT
    EmployeeID,
    Salary,
    RANK() OVER (ORDER BY Salary DESC) AS RankBySalary
FROM Employees;

Typowe funkcje obejmują: RANK(), ROW_NUMBER(), DENSE_RANK(), SUM() OVER().

Są one szczególnie ważne w przypadku obciążeń analitycznych, w których potrzebne są zarówno dane zagregowane, jak i dane na poziomie wierszy.


10) Wyjaśnij różnicę między indeksami klastrowymi i nieklastrowymi.

Cecha Clusterwyd. Indeks Nie-Clusterwyd. Indeks
Przechowywanie danych Fizycznie przestawia stół Oddzielna struktura
Liczba na tabelę jeden Kilka
Wydajność Szybciej w przypadku zapytań o zakres Szybciej w przypadku określonych wyszukiwań
Przykład użycia Główny klucz Wyszukiwania wtórne

Przykład:

CREATE CLUSTERED INDEX IX_EmployeeID ON Employees(EmployeeID);
CREATE NONCLUSTERED INDEX IX_Dept ON Employees(Department);

Wybór właściwego typu indeksu ma bezpośredni wpływ na szybkość wykonywania zapytań i efektywność przechowywania.


11) Czym są procedury składowane w języku T-SQL i dlaczego się ich używa?

Procedura składowana to wstępnie skompilowany zbiór jednego lub większej liczby poleceń SQL przechowywanych na serwerze. Zwiększają one wydajność, bezpieczeństwo i możliwość ponownego użycia, umożliwiając hermetyzację logiki i jej wielokrotne wykonywanie bez konieczności ponownej kompilacji. Procedury składowane zmniejszają ruch sieciowy i obsługują parametry dynamicznego wykonywania.

Przykład:

CREATE PROCEDURE GetEmployeeDetails @Dept NVARCHAR(50)
AS
BEGIN
    SELECT EmpName, Position FROM Employees WHERE Department = @Dept;
END;

Korzyści:

  • Lepsza wydajność dzięki wstępnej kompilacji.
  • Poprawa bezpieczeństwa poprzez kontrolowane wykonywanie zadań.
  • Łatwiejsza konserwacja kodu i modularność.

12) Wyjaśnij różnicę między procedurą składowaną a funkcją w języku T-SQL.

WYGLĄD Procedura składowana Funkcjonować
Typ zwrotu Może zwracać wiele wartości Musi zwrócić pojedynczą wartość lub tabelę
Użyj w SELECT Niedozwolone Dozwolony
Obsługa błędów TRY…CATCH obsługiwany Ograniczony
Egzekucja Wykonano za pośrednictwem EXEC Używane w linii z SQL
Kontrola transakcji Utrzymany Nie jest obsługiwany

Przykład:

  • Procedura: EXEC GetEmployeeDetails 'HR';
  • Funkcja: SELECT dbo.GetSalary(101);

Funkcje idealnie nadają się do obliczeń, procedury lepiej sprawdzają się w logice biznesowej i manipulacji danymi.


13) Czym jest wyzwalacz w języku T-SQL i jakie są jego typy?

Wyzwalacz to specjalna procedura składowana, która uruchamia się automatycznie w odpowiedzi na określone zdarzenia (INSERT, UPDATE, DELETE) w tabeli lub widoku. Wyzwalacze służą do egzekwowania reguł biznesowych, audytu zmian lub utrzymywania integralności referencyjnej.

Typ OPIS
PO WYZWALU Pożary po zakończeniu wydarzenia
ZAMIAST wyzwalacza Wykonuje się w miejsce zdarzenia wyzwalającego

Przykład:

CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
    PRINT 'New employee record added!';
END;

Unikaj nadmiernego używania wyzwalaczy — mogą one wpływać na wydajność i komplikować debugowanie.


14) Jak obsługiwać wartości NULL w języku T-SQL?

Wartość NULL oznacza brakujące lub nieznane dane. Język T-SQL oferuje kilka funkcji, które skutecznie sobie z tym radzą:

  • ISNULL(expression, replacement) → zastępuje NULL wartością domyślną.
  • COALESCE(expression1, expression2, ...) → zwraca pierwszą wartość różną od NULL.
  • NULLIF(expression1, expression2) → zwraca NULL, jeżeli wyrażenia są równe.

Przykład:

SELECT ISNULL(Manager, 'No Manager') AS ManagerName FROM Employees;

Najlepsza praktyka: Zawsze uwzględniaj wartości NULL w połączeniach i warunkach, aby uniknąć nieoczekiwanych wyników.


15) Czym są kursory w języku T-SQL i kiedy należy ich unikać?

Kursor umożliwia przetwarzanie wyników zapytania wiersz po wierszu — przydatne w przypadku złożonej logiki, w której operacje oparte na zbiorach są niewystarczające. Kursory są jednak powolny oraz wymagający dużej ilości zasobów w porównaniu do alternatyw opartych na zestawach.

Przykład:

DECLARE emp_cursor CURSOR FOR SELECT EmpName FROM Employees;
OPEN emp_cursor;
FETCH NEXT FROM emp_cursor;
-- process
CLOSE emp_cursor;
DEALLOCATE emp_cursor;

Niedogodności:

  • Zwiększone wykorzystanie pamięci.
  • Słaba skalowalność.
  • Zmniejszona wydajność.

Alternatywa: Jeśli to możliwe, należy używać łączeń tabel, podzapytań i funkcji okna.


16) Wyjaśnij polecenie MERGE i przypadki jego użycia.

MERGE polecenie wykonuje INSERT, Aktualizacja, DELETE operacje w jednym poleceniu — idealne do synchronizacji dwóch tabel.

Przykład składni:

MERGE INTO Target AS T
USING Source AS S
ON T.ID = S.ID
WHEN MATCHED THEN UPDATE SET T.Name = S.Name
WHEN NOT MATCHED BY TARGET THEN INSERT (ID, Name) VALUES (S.ID, S.Name)
WHEN NOT MATCHED BY SOURCE THEN DELETE;

Przypadków użycia:

  • Magazynowanie danych (synchronizacja tabel przejściowych i docelowych).
  • Przyrostowe ładowanie danych.
  • Prowadzenie tabel audytu lub wymiarów.

17) Jakie są różne typy funkcji zdefiniowanych przez użytkownika (UDF) w języku T-SQL?

Typ OPIS Przykład
Skalarny Zwraca pojedynczą wartość CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL
Wbudowana tabela wartości Zwraca tabelę za pomocą pojedynczego SELECT RETURN SELECT * FROM Employees WHERE Dept = 'HR'
Wieloinstrukcyjny układ wartości tabelarycznych Zwraca tabelę po wielu poleceniach Przydatne w przypadku złożonej logiki

Funkcje te ułatwiają ponowne wykorzystanie kodu i wzbogacają modułową konstrukcję zapytań.

Powinny być one deterministyczne (zwracać ten sam wynik dla tych samych danych wejściowych), o ile jest to możliwe w celu optymalizacji wydajności.


18) Czym jest normalizacja i jakie są jej zalety i wady?

Normalizacja to proces porządkowania danych w bazie danych w celu zminimalizowania redundancji i poprawy integralności. Polega ona na podziale tabel na mniejsze, powiązane ze sobą jednostki.

Normalna forma Zasada Przykład
1NF Wyeliminuj powtarzające się grupy Podziel dane rozdzielone przecinkami
2NF Usuń częściowe zależności Zapewnij pełną zależność od klucza podstawowego
3NF Usuń zależności przechodnie Przenieś atrybuty pochodne

Zalety:

  • Zmniejsza redundancję.
  • Zapewnia spójność danych.
  • Ułatwia konserwację.

Niedogodności:

  • Połączenia złożone.
  • Potencjalne kompromisy wydajnościowe w przypadku zapytań analitycznych.

19) Jakie są różne typy ograniczeń w T-SQL?

Ograniczenia wymuszają reguły dotyczące integralności danych w tabeli.

Przymus Cel Przykład
KLUCZ PODSTAWOWY Unikalnie identyfikuje każdy wiersz PRIMARY KEY (EmpID)
KLUCZ OBCY Łączy dwie tabele FOREIGN KEY (DeptID)
NIECODZIENNCH Zapewnia unikalne wartości kolumn UNIQUE (Email)
SPRAWDZ Sprawdza zakres danych CHECK (Age >= 18)
DEFAULT Zapewnia wartości domyślne DEFAULT GETDATE()

Ograniczenia zapewniają dokładność i niezawodność, redukując potrzebę rozległej walidacji na poziomie aplikacji.


20) Jak zarządzać uprawnieniami i bezpieczeństwem w T-SQL?

T-SQL zarządza bezpieczeństwem bazy danych za pośrednictwem logowania, użytkownicy, role i uprawnienia.

Uprawnienia mogą być przyznawane lub cofane na poziomie obiektu lub schematu.

Przykład:

CREATE LOGIN John WITH PASSWORD = 'Strong@123';
CREATE USER John FOR LOGIN John;
GRANT SELECT, INSERT ON Employees TO John;

Najlepsze Praktyki:

  • Zastosowanie role zamiast bezpośrednich uprawnień użytkownika.
  • Unikaj używania sa lub konta systemowe dla aplikacji.
  • Regularnie sprawdzaj uprawnienia za pomocą sys.database_permissions.

Prawidłowe zarządzanie uprawnieniami zapewnia przestrzeganie zasady najmniejszych uprawnień i zgodność z polityką bezpieczeństwa.


21) Jakie są różne poziomy izolacji transakcji w T-SQL?

Poziomy izolacji transakcji określają sposób izolowania jednej transakcji od innych — równoważenie konsystencja w współbieżność. Serwer SQL obsługuje następujące funkcje:

Poziom izolacji OPIS Brudny odczyt Niepowtarzalny odczyt Fantomowe czytanie
CZYTAJ NIEZGODNE Odczytuje niezatwierdzone dane Tak Tak Tak
PRZECZYTAJ ZATWIERDZONE Domyślne; blokady zapobiegają niepoprawnym odczytom Nie Tak Tak
POWTARZALNA CZYTANIE Zapobiega zmianie danych do momentu zatwierdzenia Nie Nie Tak
SERIALIZOWANY Pełna izolacja; najwyższy poziom blokowania Nie Nie Nie
MIGAWKA Używa wersjonowania, a nie blokowania Nie Nie Nie

Przykład:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- your code
COMMIT;

Zastosowanie MIGAWKA dla systemów o wysokiej współbieżności w celu zminimalizowania blokowania bez poświęcania spójności.


22) Czym jest impas w programie SQL Server i jak można mu zapobiec?

A impas Występuje, gdy dwie transakcje posiadają blokady, których potrzebuje druga, co skutkuje impasem. SQL Server automatycznie wykrywa i kończy jedną transakcję jako ofiarę impasu.

Przykładowy scenariusz:

  • Transakcja A blokuje Tabelę 1, a następnie czeka na Tabelę 2.
  • Transakcja B blokuje Tabelę 2, a następnie czeka na Tabelę 1.

Techniki zapobiegawcze:

  1. Uzyskaj dostęp do zasobów w tej samej kolejności.
  2. Utrzymuj krótkie transakcje.
  3. Stosuj odpowiednie poziomy izolacji.
  4. Unikaj interakcji użytkownika podczas transakcji.

Użyj narzędzia SQL Profiler lub Extended Events, aby traci blokad w czasie rzeczywistym.


23) Wyjaśnij różnicę między pesymistyczną i optymistyczną kontrolą współbieżności.

Typ OPIS Zamykający mechanizm Przypadek użycia
Pesymistyczny Blokuje dane podczas transakcji Mocne blokowanie Środowiska o wysokim poziomie konfliktów
Optymistyczny Używa wersjonowania wierszy, sprawdza przed zatwierdzeniem Minimalne blokowanie Obciążenia wymagające dużej ilości odczytu i niskiej liczby konfliktów

Przykład:

  • Pesymistyczny: Domyślny READ COMMITTED zamykający.
  • Optymistyczny: SNAPSHOT izolacja z wersjonowaniem wierszy.

Optymistyczna współbieżność zwiększa wydajność systemów wykonujących duże operacje odczytu i rzadkie aktualizacje.


24) Jak można analizować i optymalizować wolno działające zapytania T-SQL?

  1. Sprawdź plan wykonania: Identyfikuj skany, brakujące indeksy i kosztowne operacje.
  2. Użyj SET STATISTICS IO/TIME: Analizuj użycie wejścia/wyjścia i procesora.
  3. Unikaj kursorów i pętli: Zastąp operacjami opartymi na zbiorach.
  4. Optymalizacja indeksu: Dodawanie i reorganizacja pofragmentowanych indeksów.
  5. Wąchanie parametrów: Zastosowanie OPTION (RECOMPILE) aby wygenerować nowe plany.

Przykład:

SET STATISTICS TIME ON;
SELECT * FROM Orders WHERE CustomerID = 123;

Regularne monitorowanie powolnych zapytań za pomocą Dynamiczne widoki zarządzania (DMV) lubić sys.dm_exec_query_stats jest najlepszą praktyką.


25) Czym jest Dynamic SQL i jakie są jego zalety i zagrożenia?

Dynamiczny SQL umożliwia dynamiczne konstruowanie instrukcji SQL w czasie wykonywania przy użyciu zmiennych.

Przykład:

DECLARE @sql NVARCHAR(MAX);
SET @sql = 'SELECT * FROM Employees WHERE Dept = ''' + @Dept + '''';
EXEC(@sql);

Zalety:

  • Elastyczność w zakresie zmiennych nazw tabel i filtrów.
  • Możliwość ponownego wykorzystania w wielu schematach.

Niedogodności:

  • Podatny na SQL Injection jeśli nie jest sparametryzowane.
  • Trudniejsze do debugowania i konserwacji.

Zawsze używaj sp_executesql z parametrami bezpieczeństwa.


26) Czym są obiekty tymczasowe w języku T-SQL i czym się między nimi różnią?

Obiekty tymczasowe są przechowywane w TempDB i pomóc w zarządzaniu danymi pośrednimi.

Rodzaj obiektu Zakres Przykład
Lokalna tabela temperatur Specyficzne dla sesji CREATE TABLE #TempTable
Globalna tabela temperatur Widoczne dla wszystkich sesji CREATE TABLE ##TempGlobal
Zmienna tabeli Specyficzne dla partii DECLARE @Temp TABLE (...)

Najlepsze Praktyki:

  • W przypadku mniejszych zbiorów danych należy preferować zmienne tabelaryczne.
  • W przypadku większych zbiorów danych wymagających indeksowania należy używać lokalnych tabel tymczasowych.
  • Aby szybciej zwolnić zasoby, należy wyraźnie usunąć tabele tymczasowe.

27) Jak używać funkcji partycjonowania okien w języku T-SQL?

Partycjonowanie pozwala na stosowanie funkcji okna do określonych podzbiorów danych.

Przykład:

SELECT
    Department,
    EmpName,
    Salary,
    RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS RankInDept
FROM Employees;

Korzyści:

  • Efektywnie oblicza rankingi, sumy i średnie dla każdej grupy.
  • Eliminuje potrzebę wykonywania samosprzężeń i podzapytań.

Przypadków użycia: Przedziały wynagrodzeń, rankingi sprzedaży i analiza trendów.


28) Jaka jest różnica między UNION i UNION ALL w języku T-SQL?

Klauzula Duplikaty Wydajność Przypadek użycia
UNION Usuwa duplikaty Wolniejszy (używa sortowania/odróżniania) Czyste łączenie zestawów wyników
UNIA WSZYSTKIE Zachowuje duplikaty Szybciej Agregacja lub migracja danych

Przykład:

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers;

Woleć UNION ALL kiedy duplikaty są akceptowalne, a wydajność ma znaczenie.


29) Jak pracować z danymi JSON w języku T-SQL?

SQL Server obsługuje natywne funkcje JSON służące do analizowania i generowania danych JSON.

Przykład:

DECLARE @json NVARCHAR(MAX) = '{"Name":"John","Age":30}';
SELECT JSON_VALUE(@json, '$.Name') AS Name;

Kluczowe funkcje:

  • JSON_VALUE() → Byłytracwartości skalarne ts.
  • JSON_QUERY() → Byłytracobiekty/tablice ts.
  • OPENJSON() → Analizuje JSON na wiersze.
  • FOR JSON → Konwertuje wyniki zapytania do formatu JSON.

Przydatne w przypadku interfejsów API, systemów hybrydowych i integracji NoSQL.


30) Jak zarządzać bazą danych TempDB w programie SQL Server i ją optymalizować?

TempDB to systemowa baza danych, która ma kluczowe znaczenie dla tymczasowego przechowywania i kontroli wersji. Niewłaściwe zarządzanie może powodować poważne problemy z wydajnością.

Techniki optymalizacji:

  1. Umieść TempDB na szybkim dysku SSD.
  2. Wstępnie określ rozmiar plików danych i dziennika.
  3. Użyj wielu plików danych (1 na każdy rdzeń procesora, maksymalnie 8).
  4. Monitoruj z sys.dm_db_file_space_usage.
  5. Regularnie usuwaj tymczasowe obiekty.

Przykładowe zapytanie:

SELECT * FROM sys.dm_db_file_space_usage;

Aktywne zarządzanie bazą danych TempDB pozwala uniknąć konfliktów na stronach alokacji i zwiększa ogólną przepustowość bazy danych.


31) Czym są wskazówki dotyczące zapytań w języku T-SQL i kiedy należy ich używać?

Wskazówki dotyczące zapytania instruują optymalizator programu SQL Server, aby zmienił swój normalny plan wykonania.

Należy ich używać oszczędnie — tylko wtedy, gdy w pełni rozumiesz kontekst dystrybucji danych i wykonania.

Przykład:

SELECT * FROM Orders WITH (NOLOCK) WHERE CustomerID = 102;

Wskazówki:

  • NOLOCK: Odczytuje bez blokad (może odczytywać niezatwierdzone dane).
  • FORCESEEK: Wymusza wyszukiwanie indeksowe zamiast skanowania.
  • OPTIMIZE FOR: Przewodniki dotyczące wartości parametrów dla generowania planu.
  • RECOMPILE: Wymusza ponowną kompilację przy każdym wykonaniu.

Ostrzeżenie: Nadużywanie wskazówek może obniżyć wydajność wraz ze wzrostem ilości danych lub zmianą wzorców. Używaj ich tylko wtedy, gdy plan optymalizatora jest ewidentnie nieefektywny.


32) Wyjaśnij koncepcję buforowania planu wykonania w programie SQL Server.

Serwer SQL buforuje plany wykonania, aby uniknąć ponownej kompilacji w przypadku powtarzających się zapytań.

Gdy to samo zapytanie jest wykonywane ponownie z identyczną strukturą, ponownie wykorzystywany jest plan z pamięci podręcznej, co poprawia wydajność.

Przykład:

EXEC GetCustomerOrders @CustomerID = 101;

Korzyści:

  • Zmniejsza obciążenie procesora.
  • Poprawia spójność czasu reakcji.

Problemy:

  • Podsłuchiwanie parametrów może spowodować nieefektywne plany.
  • Rozrost pamięci podręcznej planu może spowodować zużycie pamięci.

Łagodzenie: Zastosowanie OPTION (RECOMPILE) or OPTIMIZE FOR UNKNOWN gdzie parametry znacznie się różnią.


33) Czym jest analizowanie parametrów i jak może ono wpływać na wydajność?

Podsłuchiwanie parametrów ma miejsce, gdy program SQL Server używa wartości parametrów z pierwszego wykonania zapytania w celu wygenerowania planu, który jest następnie ponownie wykorzystywany — nawet jeśli nie jest optymalny w przypadku późniejszych wykonań.

Przykładowy scenariusz:

  • Pierwsze wykonanie: mały zestaw danych → plan wyszukiwania indeksu.
  • Następne wykonanie: duży zbiór danych → ten sam plan wykorzystany ponownie, ale wolno.

Solutions:

  1. Zastosowanie OPTION (RECOMPILE) aby wygenerować nowe plany.
  2. Użyj zmiennych lokalnych do zamaskowania wartości parametrów.
  3. Zastosowanie OPTIMIZE FOR or OPTIMIZE FOR UNKNOWN.

Podsłuchiwanie parametrów jest jedną z najczęstszych przyczyn nieprzewidywalnej wydajności w języku T-SQL.


34) Jak monitorować i analizować wydajność zapytań w programie SQL Server?

Do profilowania i dostrajania wydajności można używać różnych narzędzi i modeli DMV:

  • Plany wykonania: Ctrl + M w SSMS lub sys.dm_exec_query_plan.
  • Wydziały komunikacji:

    • sys.dm_exec_query_stats – Procesor i czas trwania.
    • sys.dm_exec_sql_text – Tekst SQL.
    • sys.dm_exec_requests – Aktywne zapytania.
  • Monitor wydajności i rozszerzone zdarzenia na dłuższą metę trackról.

Przykład:

SELECT TOP 5
    total_worker_time / execution_count AS AvgCPU,
    total_elapsed_time / execution_count AS AvgTime,
    SUBSTRING(qt.text, 1, 100) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgTime DESC;

35) Wyjaśnij rolę statystyk w optymalizacji zapytań.

Statystyki opisują rozkład danych (np. różne wartości, gęstość, histogram), którego optymalizator używa do oszacowania kardynalności.

Jeśli statystyki są nieaktualne, program SQL Server może wybrać złe plany.

Komendy kluczowe:

  • UPDATE STATISTICS Employees;
  • sp_updatestats;
  • Ustawienie automatycznej aktualizacji: domyślnie włączone.

Najlepsze Praktyki:

  • Trzymać AUTO_UPDATE_STATISTICS włączone.
  • W przypadku dużych tabel zaplanuj aktualizacje ręczne.
  • Zastosowanie FULLSCAN dla indeksów krytycznych.

Nieaktualne statystyki są cichym zabójcą wydajności.


36) Jaka jest różnica pomiędzy wyszukiwaniem indeksu a skanowaniem indeksu?

Operacja OPIS Wydajność Przypadek użycia
Indeks Szukaj Przechodzi bezpośrednio do pasujących wierszy pompatyczność Wysoce selektywne zapytania
Skanowanie indeksu Odczytuje wszystkie wpisy indeksu sekwencyjnie Wolniej Zapytania o niskiej selektywności

Przykład:

SELECT * FROM Orders WHERE OrderID = 123; -- Seek
SELECT * FROM Orders WHERE Status = 'Active'; -- May Scan

Wskazówka dotycząca optymalizacji: Utwórz indeksy filtrowane lub obejmujące, aby przekształcić skanowanie w wyszukiwanie.


37) Wyjaśnij pojęcie tabel partycjonowanych i ich zalety.

Partycjonowanie polega na podziale dużej tabeli na mniejsze, łatwiejsze do zarządzania części (partycje), często w oparciu o zakres kolumny (np. daty).

Korzyści:

  • Szybsze zarządzanie danymi (ładowanie/rozładowywanie według partycji).
  • Poprawiona wydajność zapytań w przypadku dużych zestawów danych.
  • Przetwarzanie równoległe dla skanowań partycjonowanych.

Przykład:

CREATE PARTITION FUNCTION pfRange (DATETIME)
AS RANGE LEFT FOR VALUES ('2022-12-31', '2023-12-31');

Przypadek użycia: Magazyny danych obsługujące miliardy wierszy, w których można efektywnie archiwizować stare partycje.


38) Czym są rekurencyjne CTE i jakie mają ograniczenia?

A rekurencyjne wspólne wyrażenie tabelaryczne (CTE) odwołuje się do samego siebie, zwykle w przypadku danych hierarchicznych, takich jak schematy organizacyjne lub struktury drzewa.

Przykład:

WITH EmployeeCTE AS (
    SELECT EmpID, ManagerID, EmpName FROM Employees WHERE ManagerID IS NULL
    UNION ALL
    SELECT e.EmpID, e.ManagerID, e.EmpName
    FROM Employees e
    INNER JOIN EmployeeCTE c ON e.ManagerID = c.EmpID
)
SELECT * FROM EmployeeCTE;

Ograniczenia:

  • Domyślny limit rekurencji = Poziomy 100.
  • Może powodować problemy z wydajnością, jeśli głębokość rekursji jest duża.
  • Zastosowanie OPTION (MAXRECURSION n) aby dostosować limit.

39) W jaki sposób SQL Server radzi sobie wewnętrznie z błędami w transakcjach?

Gdy w transakcji wystąpi błąd:

  • Jeżeli to jest ciężki (poziom > 20), połączenie zostanie natychmiast zakończone.
  • If niegroźny, można go złapać TRY...CATCH.

Przykład:

BEGIN TRY
    BEGIN TRANSACTION;
    UPDATE Accounts SET Balance -= 500 WHERE ID = 1;
    INSERT INTO AuditLog VALUES ('Debit');
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION;
    PRINT ERROR_MESSAGE();
END CATCH;

Najlepsze praktyki: Zawsze opakowuj DML w TRY…CATCH, aby zwiększyć odporność na błędy.


40) Jakie są zaawansowane techniki dostrajania wydajności języka T-SQL?

  1. Unikaj skalarnych funkcji UDF w SELECT — funkcje inline są szybsze.
  2. Użyj filtrowanych indeksów aby zmniejszyć rozmiar indeksu.
  3. Wykorzystanie OLTP w pamięci (Hekaton) dla systemów o wysokiej współbieżności.
  4. Wykonywanie w trybie wsadowym na indeksach kolumnowych do celów analitycznych.
  5. Wyeliminuj niejawne konwersje poprzez dopasowywanie typów danych.
  6. Użyj magazynu zapytań aby porównać plany historyczne.

Przykład wykrywania konwersji niejawnych:

SELECT * FROM sys.dm_exec_query_stats CROSS APPLY sys.dm_exec_query_plan(plan_handle)
WHERE CAST(query_plan AS NVARCHAR(MAX)) LIKE '%CONVERT_IMPLICIT%';

Dostrajanie wydajności to proces ciągły, a nie jednorazowe wydarzenie.


41) Jak zidentyfikowałbyś zapytania w programie SQL Server wymagające największej ilości zasobów?

Kosztowne zapytania można zidentyfikować, korzystając z dynamicznych widoków zarządzania (DMV), które rejestrują historyczne statystyki wykonania.

Przykład:

SELECT TOP 10
    total_logical_reads / execution_count AS AvgReads,
    total_worker_time / execution_count AS AvgCPU,
    total_elapsed_time / execution_count AS AvgDuration,
    SUBSTRING(qt.text, 1, 200) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgCPU DESC;

Kluczowe dane:

  • AvgCPU:Średni czas procesora na wykonanie.
  • AvgReads:Intensywność wejścia/wyjścia.
  • AvgDuration:Opóźnienie wykonania.

Dzięki takiemu podejściu administratorzy baz danych mogą izolować skomplikowane zapytania, zanim użytkownicy zauważą spadek wydajności.


42) Jak wykryć i naprawić brakujące indeksy w programie SQL Server?

SQL Server automatycznie tracbrakujące zalecenia indeksowe dla DMV.

Przykład:

SELECT
    migs.user_seeks AS Seeks,
    mid.statement AS TableName,
    mid.equality_columns,
    mid.inequality_columns,
    mid.included_columns
FROM sys.dm_db_missing_index_details mid
JOIN sys.dm_db_missing_index_groups mig ON mid.index_handle = mig.index_handle
JOIN sys.dm_db_missing_index_group_stats migs ON mig.index_group_handle = migs.group_handle
ORDER BY migs.user_seeks DESC;

Najlepsze Praktyki:

  • Najpierw należy priorytetyzować indeksy o wysokim priorytecie.
  • Przed utworzeniem należy dokonać weryfikacji za pomocą planów wykonania.
  • Unikaj nadmiernego indeksowania, gdyż spowalnia ono zapis.

43) Jaka jest różnica między kopiowaniem lustrzanym bazy danych, replikacją i wysyłaniem dziennika?ping?

Cecha Cel W czasie rzeczywistym Failover Złożoność
Lustrzane odbicie Kopia bazy danych o wysokiej dostępności Tak automatycznie Średni
Replikacja Dystrybucja danych w bazach danych Częściowa Instrukcja obsługi Wysoki
Statek Logowyping Strategia DR oparta na kopii zapasowej Nie Instrukcja obsługi Niski

Wskazówki dotyczące użytkowania:

  • Mirroring → Systemy wysokiej dostępności OLTP.
  • Replikacja → Raportowanie rozproszone.
  • Statek Logowyping → Konfiguracje odzyskiwania po awarii.

44) Jak rozwiązywać problemy z blokowaniem w programie SQL Server?

Blokowanie występuje wtedy, gdy jeden proces utrzymuje blokady potrzebne innemu procesowi.

Aby zidentyfikować blokery:

SELECT
    blocking_session_id AS Blocker,
    session_id AS Blocked,
    wait_type,
    wait_time,
    wait_resource
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

Solutions:

  • Skróć długość transakcji.
  • Użyj izolacji migawek.
  • Dopasuj zapytania, aby zminimalizować blokowanie.
  • Zidentyfikuj otwarte transakcje trwające długo DBCC OPENTRAN.

45) W jaki sposób Query Store serwera SQL Server pomaga w dostrajaniu wydajności?

Magazyn zapytań przechwytuje tekst zapytania, plany i statystyki czasu wykonania, umożliwiając analiza regresji planu.

Pomaga zidentyfikować sytuację, w której zapytanie nagle staje się wolniejsze ze względu na zmiany planu.

Przykład:

SELECT q.query_id, p.plan_id, rs.avg_duration
FROM sys.query_store_query q
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
ORDER BY rs.avg_duration DESC;

Korzyści:

  • Porównaj plany historyczne.
  • Wymuszaj dobre plany.
  • Track trendów wydajności na przestrzeni czasu.

46) Jak można zapobiec atakom typu SQL injection w aplikacjach T-SQL?

Obrona podstawowa:

  1. Zastosowanie zapytania parametryczne przez sp_executesql.
  2. Sprawdź poprawność i dezynfekcję wszystkich danych wprowadzanych przez użytkownika.
  3. Unikaj dynamicznego łączenia SQL.
  4. Zatrudniać zasada najmniejszych przywilejów dla kont baz danych.

Bezpieczny przykład:

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT * FROM Employees WHERE Dept = @Dept';
EXEC sp_executesql @sql, N'@Dept NVARCHAR(50)', @Dept = 'HR';

Mimo że wstrzykiwanie kodu SQL odbywa się na poziomie aplikacji, Administratorzy baz danych muszą przeprowadzać audyt procedur składowanych i dzienników do wykonania bez parametrów.


47) Jak wykorzystać Extended Events do szczegółowego monitorowania wydajności?

Extended Events (XEvents) to lekka platforma do monitorowania wydajności — nowoczesna alternatywa dla języka SQL Trace.

Przykład:

CREATE EVENT SESSION TrackQueries
ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(WHERE duration > 1000)
ADD TARGET package0.event_file (SET filename = 'C:\Temp\QueryMonitor.xel');
ALTER EVENT SESSION TrackQueries ON SERVER STATE = START;

Przypadków użycia:

  • Monitoruj duże zapytania procesora.
  • Wychwytywanie blokad i brakujących indeksów.
  • Profiluj długotrwałe polecenia w środowisku produkcyjnym, minimalizując narzut.

48) Czym są indeksy filtrowane i kiedy należy ich używać?

Indeks filtrowany indeksuje tylko podzbiór wierszy spełniających warunek filtru — co poprawia wydajność i zmniejsza ilość miejsca do przechowywania.

Przykład:

CREATE INDEX IX_ActiveEmployees
ON Employees (Department)
WHERE Status = 'Active';

Korzyści:

  • Mniejszy rozmiar indeksu.
  • Szybsza konserwacja.
  • Zoptymalizowany pod kątem zapytań selektywnych.

Najlepszy dla: Kolumny z nierównomiernym rozkładem danych (np. rekordy aktywne i nieaktywne).


49) Jak bezpiecznie migrować dane między środowiskami SQL Server?

Bezpieczna migracja danych wymaga zaplanowania spójność, przestoje i wycofywanie.

Najlepsze Praktyki:

  1. Zastosowanie replikacja transakcyjna or przechwytywanie danych zmianowych (CDC) do synchronizacji na żywo.
  2. Tymczasowo wyłącz ograniczenia i wyzwalacze.
  3. Zastosowanie BCP or SSIS do masowego przesyłania danych.
  4. Sprawdź liczbę wierszy i sumy kontrolne.
  5. Zawsze uruchamiaj kontrole integralności po migracji (DBCC CHECKDB).

Przykład:

bcp Database.dbo.Table out TableData.dat -n -S Server -T

Testowanie skryptów migracji w środowisku przejściowym nie podlega negocjacjom.


50) Jak identyfikować i rozwiązywać problemy związane z zapytaniami wrażliwymi na parametry (PSQ)?

Zapytania wrażliwe na parametry działają niespójnie w zależności od wartości parametrów, co jest częstym problemem w praktyce.

Wykrycie: Zastosowanie Sklep zapytań or sys.dm_exec_query_stats aby zidentyfikować wiele planów dla jednego zapytania.

Strategie naprawcze:

  1. Zastosowanie OPCJA (PONOWNA KOMPILACJA) za każdą egzekucję.
  2. Zastosowanie OPTYMALIZUJ POD KĄTEM NIEZNANEGO aby stworzyć ogólny plan.
  3. Stwórz przewodniki po planach aby wymusić optymalne ścieżki wykonania.
  4. Zastosowanie wskazówki dotyczące zapytań tylko jeśli to konieczne.

Zagadnienia wrażliwe na parametry wymagają znalezienia równowagi między stabilnością planu i przewidywalnością wydajności.

🔍 Najważniejsze pytania na rozmowie kwalifikacyjnej dotyczące języka T-SQL, scenariusze z życia wzięte i odpowiedzi strategiczne

1) Jaka jest różnica między INNER JOIN i LEFT JOIN w języku T-SQL?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce sprawdzić Twoją wiedzę na temat operacji łączenia i sposobu zarządzania relacjami między danymi w zapytaniach SQL.

Przykładowa odpowiedź: An INNER JOIN zwraca tylko wiersze, które mają pasujące wartości w obu tabelach, podczas gdy LEFT JOIN Zwraca wszystkie wiersze z lewej tabeli wraz z pasującymi wierszami z prawej tabeli. W przypadku braku dopasowania, dla kolumn z prawej tabeli zwracane są wartości NULL. To rozróżnienie jest kluczowe podczas pracy z częściowymi lub opcjonalnymi relacjami w bazach danych.


2) Jak zidentyfikować i usunąć duplikaty rekordów z tabeli w języku T-SQL?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce sprawdzić Twoją umiejętność korzystania z funkcji okna i CTE w celu radzenia sobie z problemami związanymi z jakością danych.

Przykładowa odpowiedź: Użyłbym wspólnego wyrażenia tabelarycznego (CTE) w połączeniu z ROW_NUMBER() Funkcja identyfikacji duplikatów. Na przykład:

WITH CTE AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS rn
  FROM MyTable
)
DELETE FROM CTE WHERE rn > 1;

Takie podejście pozwala usunąć duplikaty, zachowując jednocześnie jeden unikatowy rekord dla każdej grupy.


3) Czy możesz wyjaśnić, czym jest CTE (Common Table Expression) i kiedy się go używa?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną sprawdza Twoją wiedzę na temat strukturyzacji zapytań i tymczasowych zestawów wyników.

Przykładowa odpowiedź: CTE to tymczasowy zbiór wyników zdefiniowany w zakresie wykonania pojedynczego zapytania. Jest on przydatny do upraszczania złożonych złączeń i podzapytań, poprawy czytelności i umożliwienia zapytań rekurencyjnych. W mojej poprzedniej roli często korzystałem z CTE, aby rozbić wieloetapową logikę agregacji na łatwiejsze w utrzymaniu komponenty.


4) Jak radzisz sobie z dostrajaniem wydajności zapytań T-SQL?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce ocenić Twoje doświadczenie w optymalizacji zapytań i rozwiązywaniu problemów z wydajnością.

Przykładowa odpowiedź: Zaczynam od analizy planu wykonania, aby zidentyfikować powolne operacje, takie jak skanowanie tabel czy kosztowne sprzężenia. Następnie sprawdzam brakujące indeksy, zbędne podzapytania lub nieefektywne sprzężenia. Analizuję również statystyki i stosuję strategie indeksowania, takie jak indeksy pokrywające lub filtrowane, aby poprawić wydajność. Na koniec sprawdzam logikę zapytań, aby upewnić się, że wykorzystuje ona operacje oparte na zbiorach, a nie przetwarzanie wiersz po wierszu.


5) Opisz sytuację, w której musiałeś debugować wolno działające zapytanie w środowisku produkcyjnym. Jakie kroki podjąłeś?

Oczekuje się od kandydata: To pytanie behawioralne ocenia Twoje umiejętności rozwiązywania rzeczywistych problemów i komunikacji.

Przykładowa odpowiedź: Na poprzednim stanowisku wykonanie zapytania do raportu trwało ponad 20 minut. Przeanalizowałem plan wykonania i odkryłem, że w jednym z łączeń brakowało indeksu w kolumnie klucza obcego. Po utworzeniu indeksu i zaktualizowaniu statystyk czas wykonania zapytania skrócił się do poniżej 30 sekund. Udokumentowałem również poprawkę i podzieliłem się nią z zespołem, aby zapobiec podobnym problemom w przyszłości.


6) Czym są tabele tymczasowe i zmienne tabelowe i czym się od siebie różnią?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną sprawdza Twoją wiedzę na temat opcji tymczasowego przechowywania danych w języku T-SQL.

Przykładowa odpowiedź: Tabele tymczasowe (#TempTable) są tworzone w bazie danych tempdb i obsługują indeksy, ograniczenia i statystyki. Zmienne tabeli (@TableVar) są przechowywane w pamięci i mają ograniczone wsparcie statystyczne, co czyni je odpowiednimi dla mniejszych zbiorów danych. Tabele tymczasowe są lepsze w przypadku dużych lub złożonych zbiorów danych, natomiast zmienne tabelowe są bardziej wydajne w przypadku małych, krótkotrwałych danych.


7) Jak poradziłbyś sobie z obsługą błędów i transakcjami w języku T-SQL?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną sprawdza Twoją wiedzę na temat integralności transakcji i obsługi wyjątków.

Przykładowa odpowiedź: używam BEGIN TRANSACTION, COMMIT, ROLLBACK oświadczenia zapewniające spójność danych. Dołączam również TRY...CATCH bloki do poprawnego obsługiwania błędów. Na przykład:

BEGIN TRY
  BEGIN TRANSACTION
    -- SQL operations here
  COMMIT TRANSACTION
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION
  PRINT ERROR_MESSAGE()
END CATCH

Takie podejście zapobiega częściowym aktualizacjom danych w przypadku wystąpienia błędów.


8) Jak używać funkcji okna w języku T-SQL i czy możesz podać przykład?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce ocenić Twoją biegłość w formułowaniu zaawansowanych zapytań analitycznych.

Przykładowa odpowiedź: Funkcje okienkowe umożliwiają wykonywanie obliczeń na zestawach wierszy powiązanych z bieżącym wierszem bez zwijania danych. Na przykład:

SELECT 
  EmployeeID, 
  Salary,
  RANK() OVER (ORDER BY Salary DESC) AS SalaryRank
FROM Employees;

Funkcja ta przypisuje pracownikom numery rankingowe na podstawie ich wynagrodzenia, co ułatwia analizę trendów w zakresie wydajności.


9) Opowiedz mi o złożonym projekcie T-SQL, nad którym pracowałeś i jak podszedłeś do jego wyzwań.

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną zwraca uwagę na duże doświadczenie, umiejętność rozwiązywania problemów i pracę zespołową.

Przykładowa odpowiedź: Na moim ostatnim stanowisku zbudowałem potok ETL magazynu danych, wykorzystując procedury składowane T-SQL. Wyzwaniem była efektywna obsługa dużych wolumenów danych. Optymalizowałem zapytania z wykorzystaniem partycjonowanych tabel, obciążeń przyrostowych i przetwarzania wsadowego. Współpracowałem również z zespołem BI, aby zapewnić spójność projektów schematów i zwiększyć szybkość raportowania o ponad 40%.


10) Jak poradziłbyś sobie z sytuacją, w której napisana przez Ciebie procedura składowana spowodowałaby blokadę w środowisku produkcyjnym?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną sprawdza Twoje umiejętności zarządzania kryzysowego i świadomość techniczną.

Przykładowa odpowiedź: Najpierw zidentyfikowałbym impas za pomocą programu SQL Server sys.dm_tran_locks i grafy zakleszczeń. Następnie analizowałem kolejność dostępu do zasobów i refaktoryzowałem procedurę, aby uzyskać blokady w spójnej kolejności. W mojej poprzedniej pracy wdrożyłem również logikę ponawiania prób dla transakcji, których dotyczy problem, i zaplanowałem regularne monitorowanie, aby wcześnie wykrywać podobne wzorce.

Podsumuj ten post następująco: