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

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:
- Zastosowanie właściwe indeksowanie w często wyszukiwanych kolumnach.
- Uniknąć
SELECT *— wyraźnie określ kolumny. - Zastosowanie operacje oparte na zbiorach zamiast kursorów.
- Analizuj plany wykonania przy użyciu SQL Server Management Studio.
- Zastosowanie Łączy się wydajnie przy odpowiednich warunkach ON.
- 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
salub 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:
- Uzyskaj dostęp do zasobów w tej samej kolejności.
- Utrzymuj krótkie transakcje.
- Stosuj odpowiednie poziomy izolacji.
- 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 COMMITTEDzamykający. - Optymistyczny:
SNAPSHOTizolacja 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?
- Sprawdź plan wykonania: Identyfikuj skany, brakujące indeksy i kosztowne operacje.
- Użyj SET STATISTICS IO/TIME: Analizuj użycie wejścia/wyjścia i procesora.
- Unikaj kursorów i pętli: Zastąp operacjami opartymi na zbiorach.
- Optymalizacja indeksu: Dodawanie i reorganizacja pofragmentowanych indeksów.
- 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:
- Umieść TempDB na szybkim dysku SSD.
- Wstępnie określ rozmiar plików danych i dziennika.
- Użyj wielu plików danych (1 na każdy rdzeń procesora, maksymalnie 8).
- Monitoruj z
sys.dm_db_file_space_usage. - 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:
- Zastosowanie
OPTION (RECOMPILE)aby wygenerować nowe plany. - Użyj zmiennych lokalnych do zamaskowania wartości parametrów.
- Zastosowanie
OPTIMIZE FORorOPTIMIZE 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 + Mw SSMS lubsys.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_STATISTICSwłączone. - W przypadku dużych tabel zaplanuj aktualizacje ręczne.
- Zastosowanie
FULLSCANdla 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?
- Unikaj skalarnych funkcji UDF w SELECT — funkcje inline są szybsze.
- Użyj filtrowanych indeksów aby zmniejszyć rozmiar indeksu.
- Wykorzystanie OLTP w pamięci (Hekaton) dla systemów o wysokiej współbieżności.
- Wykonywanie w trybie wsadowym na indeksach kolumnowych do celów analitycznych.
- Wyeliminuj niejawne konwersje poprzez dopasowywanie typów danych.
- 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:
- Zastosowanie zapytania parametryczne przez
sp_executesql. - Sprawdź poprawność i dezynfekcję wszystkich danych wprowadzanych przez użytkownika.
- Unikaj dynamicznego łączenia SQL.
- 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:
- Zastosowanie replikacja transakcyjna or przechwytywanie danych zmianowych (CDC) do synchronizacji na żywo.
- Tymczasowo wyłącz ograniczenia i wyzwalacze.
- Zastosowanie BCP or SSIS do masowego przesyłania danych.
- Sprawdź liczbę wierszy i sumy kontrolne.
- 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:
- Zastosowanie OPCJA (PONOWNA KOMPILACJA) za każdą egzekucję.
- Zastosowanie OPTYMALIZUJ POD KĄTEM NIEZNANEGO aby stworzyć ogólny plan.
- Stwórz przewodniki po planach aby wymusić optymalne ścieżki wykonania.
- 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.
