Top 50 T-SQL-interviewspørgsmål og -svar (2026)

T-SQL interviewspørgsmål og svar

Forberedelse til et T-SQL-interview? Tid til at skærpe din forståelse af, hvordan databaser rent faktisk fungerer under overfladen. Med T-SQL interviewspørgsmål, rekrutterere vurderer ikke blot syntaksgenkendelse, men også din beherskelse af datamanipulation, optimering og logisk strukturering.

Mulighederne inden for dette område fortsætter med at vokse, da virksomheder er afhængige af datadrevne indsigter. Kandidater med stærk teknisk ekspertise, analysefærdigheder og praktiske problemløsningsevner skiller sig ud – uanset om de er nyuddannede eller professionelle med 5 til 10 års erfaring. Forståelse af spørgsmål og svar på både grundlæggende og avanceret niveau hjælper teamledere, ledere og tekniske seniorer med at identificere stærke SQL-færdigheder og erfaring på root-niveau.

Vores guide trækker på indsigt fra over 65 ansættelseschefer, over 40 seniorudviklere og dataprofessionelle på tværs af brancher og sikrer dækning af alt fra grundlæggende SQL-logik til avancerede optimeringsteknikker, som tekniske ledere verden over har tillid til.
Læs mere…

👉 Gratis PDF-download: T-SQL-interviewspørgsmål og -svar

De bedste spørgsmål og svar til T-SQL-jobsamtaler

1) Hvad er T-SQL, og hvordan adskiller det sig fra standard SQL?

Transact-SQL (T-SQL) er Microsoft's proprietære udvidelse af SQL-sproget, primært brugt med Microsoft SQL ServerDet forbedrer standard SQL ved at introducere proceduremæssige programmeringsfunktioner såsom variabler, betingelser, løkker, fejlhåndtering og indbyggede funktioner. Mens standard SQL fokuserer på datamanipulation (SELECT, INSERT, UPDATE, DELETE), understøtter T-SQL control-of-flow-sætninger (IF…ELSE, WHILE), transaktionshåndtering og systemfunktioner, der giver udviklere mulighed for at skrive komplekse scripts.

Aspect SQL T-SQL
Ejerskab ANSI/ISO-standard Microsoft
Procedurel logik Limited Understøttet (variabler, løkker)
Fejlhåndtering Minimum PRØV…FANG understøttes
Primær brug Generiske databaser SQL Server

Eksempel:

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

2) Forklar de forskellige typer af joins i T-SQL med eksempler.

Joins i T-SQL kombinerer rækker fra to eller flere tabeller baseret på relaterede kolonner. Det er afgørende at forstå deres typer for relationelle dataforespørgsler.

Deltag Type Beskrivelse Eksempelsyntaks
INNER JOIN Returnerer kun matchende rækker SELECT * FROM A INNER JOIN B ON A.id = B.id;
LEFT JOIN Alle fra venstre + kampe fra højre SELECT * FROM A LEFT JOIN B ON A.id = B.id;
HØJRE JOIN Alle fra højre + matches fra venstre SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
FULDSTÆNDIG TILMELDING Kombinerer VENSTRE + HØJRE SELECT * FROM A FULL JOIN B ON A.id = B.id;
KRÆS DETALJER Kartesisk produkt SELECT * FROM A CROSS JOIN B;

Praktisk eksempel: Vær med Orders og Customers for at finde ud af, hvilke kunder der har afgivet ordrer ved hjælp af INNER JOIN.


3) Hvad er almindelige tabeludtryk (CTE'er), og hvad er deres fordele?

Et fælles tabeludtryk (CTE) leverer et midlertidigt navngivet resultatsæt, der kan refereres til inden for en SELECT, INSERT, UPDATE eller DELETE sætning. Det forbedrer læsbarheden og forenkler rekursive forespørgsler.

fordele:

  • Forbedrer klarheden og vedligeholdelsen af ​​forespørgsler.
  • Aktiverer rekursion (for hierarkiske data som organisationsdiagrammer).
  • Hjælper med at undgå gentagne underforespørgsler.
  • Øger modulariteten i store scripts.

Eksempel:

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

4) Hvordan adskiller midlertidige tabeller og tabelvariabler sig i T-SQL?

Begge bruges til at gemme mellemresultater, men deres adfærd og omfang adskiller sig betydeligt.

Feature Midlertidigt bord (#Temp) Tabelvariabel (@TableVar)
Gemt i TempDB Hukommelse (med begrænset TempDB-brug)
Transaktionelt omfang Følger transaktioner Uafhængig af transaktioner
Indexes Understøttet Limited
Ydeevne Bedre til store datasæt Bedre til små datasæt

Eksempel:

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

Brug midlertidige tabeller, når du arbejder med store datasæt eller kræver indekser.


5) Forklar konceptet med transaktioner i T-SQL og deres livscyklus.

En transaktion i T-SQL sikrer, at en række operationer udføres som en enkelt logisk enhed. Livscyklussen omfatter BEGIN TRANSAKTION, COMMITog RULBACK.

Stage Beskrivelse
BEGIN TRANSAKTION Starter transaktionen
BEFØJ TRANSAKTION Gemmer alle ændringer permanent
TILBAGETRÆKNINGSTRANSAKTION Fortryder alle handlinger siden sidste BEGIN

Eksempel:

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

Hvis der opstår en fejl undervejs, ROLLBACK opretholder dataintegriteten.


6) Hvad er forskellen mellem DELETE-, TRUNCATE- og DROP-kommandoerne?

Kommando Funktion Tilbagerulning Påvirker strukturen Speed
SLET Fjerner specifikke rækker Ja Ingen Langsommere
afkorte Fjerner alle rækker Nej (normalt) Ingen Hurtigt
DROP Sletter hele tabellen Ingen Ja Hurtigste

Eksempel:

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

Brug DELETE til selektiv fjernelse, TRUNCATE til rydning, og DROP at fjerne bordet helt.


7) Hvordan fungerer fejlhåndtering i T-SQL?

T-SQL leverer struktureret fejlhåndtering via TRY...CATCH blok, hvilket giver udviklere mulighed for at håndtere runtime-fejl på en elegant måde.

Eksempel:

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

Denne tilgang isolerer den fejlbehæftede handling og forhindrer transaktionen i at beskadige dataintegriteten. Udviklere kan også få adgang til systemfunktioner som f.eks. ERROR_NUMBER() or ERROR_SEVERITY() til diagnostik.


8) Hvad er de forskellige måder at optimere T-SQL-forespørgsels ydeevne på?

Optimering involverer finjustering af SQL-design, indeksering og udførelsesstrategier.

Nøgleteknikker:

  1. Brug korrekt indeksering på ofte forespørgte kolonner.
  2. Undgå SELECT * — angiv eksplicit kolonner.
  3. Brug sætbaserede operationer i stedet for markører.
  4. Analyser udførelsesplaner ved hjælp af SQL Server Management Studio.
  5. Brug JOIN'er effektivt med korrekte ON-forhold.
  6. Reducer indlejrede underforespørgslerforetrækker CTE'er eller midlertidige tabeller.

Ydelsesjustering i T-SQL inkluderer også overvågning af forespørgselsudførelsesstatistik ved hjælp af SET STATISTICS IO ON.


9) Hvad er vinduesfunktioner, og hvornår skal du bruge dem?

Vinduefunktioner udfører beregninger på tværs af et sæt rækker relateret til den aktuelle række, uden at samle dem til et enkelt resultat. De er nyttige til rangering, løbende totaler og glidende gennemsnit.

Eksempel:

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

Almindelige funktioner inkluderer RANK(), ROW_NUMBER(), DENSE_RANK()og SUM() OVER().

Disse er afgørende for analytiske arbejdsbelastninger, hvor du har brug for både aggregerede data og data på rækkeniveau.


10) Forklar forskellen mellem klyngede og ikke-klyngede indeks.

Feature Clustered Index Ikke-Clustered Index
Datalagring Omarrangerer fysisk tabellen Separat struktur
Antal pr. bord Én Multiple
Ydeevne Hurtigere for intervalforespørgsler Hurtigere til specifikke opslag
Anvendelseseksempel Primærnøgle Sekundære søgninger

Eksempel:

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

Valg af den rigtige indekstype påvirker direkte forespørgselsudførelseshastighed og lagringseffektivitet.


11) Hvad er lagrede procedurer i T-SQL, og hvorfor bruges de?

En lagret procedure er en prækompileret samling af en eller flere SQL-sætninger, der er gemt på serveren. De forbedrer ydeevne, sikkerhed og genbrugelighed ved at give dig mulighed for at indkapsle logik og udføre den gentagne gange uden at skulle rekompilere. Lagrede procedurer reducerer netværkstrafik og understøtter parametre til dynamisk udførelse.

Eksempel:

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

Fordele:

  • Bedre ydeevne på grund af prækompilering.
  • Forbedret sikkerhed gennem kontrolleret udførelse.
  • Nemmere kodevedligeholdelse og modularisering.

12) Forklar forskellen mellem en lagret procedure og en funktion i T-SQL.

Aspect Lagret procedure Funktion
Returtype Kan returnere flere værdier Skal returnere en enkelt værdi eller tabel
Brug i SELECT Ikke tilladt Tilladt
Fejlhåndtering PRØV…FANG understøttes Limited
Udførelse Udført via EXEC Bruges inline med SQL
Transaktionskontrol Understøttet Ikke understøttet

Eksempel:

  • Procedure: EXEC GetEmployeeDetails 'HR';
  • Funktion: SELECT dbo.GetSalary(101);

Funktioner er ideelle til beregninger; procedurer er bedre til forretningslogik og datamanipulation.


13) Hvad er en trigger i T-SQL, og hvilke typer findes der?

En trigger er en særlig lagret procedure, der udføres automatisk som reaktion på bestemte hændelser (INSERT, UPDATE, DELETE) i en tabel eller visning. Triggere bruges til at håndhæve forretningsregler, revidere ændringer eller opretholde referentiel integritet.

Type Beskrivelse
EFTER Trigger Affyring efter arrangementet er afsluttet
I STEDET FOR Trigger Udføres i stedet for den udløsende hændelse

Eksempel:

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

Undgå overforbrug af triggere – de kan påvirke ydeevnen og komplicere fejlfinding.


14) Hvordan håndterer man NULL-værdier i T-SQL?

NULL repræsenterer manglende eller ukendte data. T-SQL tilbyder adskillige funktioner til at håndtere det effektivt:

  • ISNULL(expression, replacement) → erstatter NULL med en standardværdi.
  • COALESCE(expression1, expression2, ...) → returnerer den første værdi, der ikke er NULL.
  • NULLIF(expression1, expression2) → returnerer NULL hvis udtrykkene er ens.

Eksempel:

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

Bedste praksis: Tag altid højde for NULL'er i joins og betingelser for at undgå uventede resultater.


15) Hvad er cursorer i T-SQL, og hvornår bør de undgås?

En markør tillader række-for-række behandling af forespørgselsresultater – nyttigt til kompleks logik, hvor sætbaserede operationer er utilstrækkelige. Markører er dog langsom og ressourcetunge sammenlignet med sætbaserede alternativer.

Eksempel:

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

Ulemper:

  • Øget hukommelsesforbrug.
  • Dårlig skalerbarhed.
  • Nedsat ydeevne.

Alternativ: Brug tabeljoins, underforespørgsler eller vinduesfunktioner, når det er muligt.


16) Forklar MERGE-sætningen og dens anvendelsesscenarier.

MERGE udsagnet udføres INSERT, OPDATERog SLET operationer i en enkelt kommando — ideel til synkronisering af to tabeller.

Syntakseksempel:

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;

Brug sager:

  • Datalagring (synkronisering af staging og måltabeller).
  • Trinvis dataindlæsning.
  • Vedligeholdelse af revisions- eller dimensionstabeller.

17) Hvad er de forskellige typer brugerdefinerede funktioner (UDF'er) i T-SQL?

Type Beskrivelse Eksempel
Skalar Returnerer en enkelt værdi CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL
Indlejret tabelværdi Returnerer en tabel via single SELECT RETURN SELECT * FROM Employees WHERE Dept = 'HR'
Tabel med flere sætninger – værdiansat Returnerer en tabel efter flere udsagn Nyttig til kompleks logik

Funktioner fremmer genbrug af kode og forbedrer modulært forespørgselsdesign.

De bør være deterministiske (returnere det samme resultat for det samme input) når det er muligt for at optimere ydeevnen.


18) Hvad er normalisering, og hvad er dens fordele og ulemper?

Normalisering er processen med at organisere data i en database for at minimere redundans og forbedre integriteten. Det involverer opdeling af tabeller i mindre, relaterede enheder.

Normal form Herske Eksempel
1NF Eliminer gentagne grupper Opdel kommaseparerede data
2NF Fjern delvise afhængigheder Sørg for fuld afhængighed af primærnøgle
3NF Fjern transitive afhængigheder Flyt afledte attributter

fordele:

  • Reducerer redundans.
  • Sikrer datakonsistens.
  • Forenkler vedligeholdelsen.

Ulemper:

  • Komplekse sammenføjninger.
  • Potentielle ydeevnekompromisser for analytiske forespørgsler.

19) Hvad er de forskellige typer af begrænsninger i T-SQL?

Begrænsninger håndhæver regler for dataintegritet i en tabel.

Begrænsning Formål Eksempel
PRIMÆRNØGLE Identificerer hver række entydigt PRIMARY KEY (EmpID)
FREMMED NØGLE Linker to tabeller FOREIGN KEY (DeptID)
ENESTÅENDE Sikrer unikke kolonneværdier UNIQUE (Email)
KONTROLLERE Validerer dataområde CHECK (Age >= 18)
DEFAULT Angiver standardværdier DEFAULT GETDATE()

Begrænsninger sikrer nøjagtighed og pålidelighed, hvilket reducerer behovet for omfattende validering på applikationsniveau.


20) Hvordan administrerer man tilladelser og sikkerhed i T-SQL?

T-SQL administrerer databasesikkerhed via logins, brugere, roller og tilladelser.

Tilladelser kan gives eller tilbagekaldes på objekt- eller skemaniveau.

Eksempel:

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

Bedste praksis:

  • Brug roller i stedet for direkte brugertilladelser.
  • Undgå at bruge sa eller systemkonti til applikationer.
  • Revider regelmæssigt tilladelser med sys.database_permissions.

Korrekt tilladelsesstyring sikrer princippet om færrest rettigheder og overholdelse af sikkerhedspolitikker.


21) Hvad er de forskellige transaktionsisoleringsniveauer i T-SQL?

Transaktionsisoleringsniveauer bestemmer, hvordan én transaktion isoleres fra andre – afbalancering konsistens med samtidighedSQL Server understøtter følgende:

Isolationsniveau Beskrivelse Beskidt læsning Ikke-gentagelig læsning Fantomlæsning
LÆS UNCOMMITTED Læser ikke-gemte data Ja Ja Ja
LÆS FORPLIGTET Standard; låse forhindrer uhensigtsmæssig læsning Ingen Ja Ja
GENTAGLIG LÆSNING Forhindrer dataændringer indtil commit Ingen Ingen Ja
SERIALISERbar Fuld isolering; højeste låsning Ingen Ingen Ingen
STILLBILLEDE Bruger versionsstyring, ikke låsning Ingen Ingen Ingen

Eksempel:

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

Brug STILLBILLEDE for systemer med høj samtidighed for at minimere blokering uden at gå på kompromis med konsistens.


22) Hvad er en fastlåst situation i SQL Server, og hvordan kan man forhindre den?

A dødvande opstår, når to transaktioner indeholder låse, som hinanden har brug for, hvilket resulterer i en dødvande. SQL Server registrerer og afslutter automatisk én transaktion som offer for dødvandet.

Eksempel Scenario:

  • Transaktion A låser tabel1 og venter derefter på tabel2.
  • Transaktion B låser tabel2 og venter derefter på tabel1.

Forebyggelsesteknikker:

  1. Få adgang til ressourcer i samme rækkefølge.
  2. Hold transaktionerne korte.
  3. Brug passende isoleringsniveauer.
  4. Undgå brugerinteraktion i transaktioner.

Brug SQL Profiler eller Extended Events til at spore fastlåste situationer i realtid.


23) Forklar forskellen mellem pessimistisk og optimistisk samtidighedskontrol.

Type Beskrivelse Låsemekanisme Use Case
pessimistisk Låser data under transaktion Tung låsning Miljøer med høj konflikt
Optimistisk Bruger rækkeversionering, kontrollerer før commit Minimal låsning Læsetunge arbejdsbyrder med lav konflikt

Eksempel:

  • Pessimistisk: Standard READ COMMITTED låsning.
  • Optimistisk: SNAPSHOT isolering med rækkeversionering.

Optimistisk samtidighed forbedrer ydeevnen for systemer med store læseoperationer og sjældne opdateringer.


24) Hvordan kan man analysere og optimere en langsomt kørende T-SQL-forespørgsel?

  1. Tjek udførelsesplan: Identificer scanninger, manglende indeks og dyre operationer.
  2. Brug INDSTIL STATISTIK IO/TID: Analyser I/O- og CPU-forbrug.
  3. Undgå markører og løkker: Erstat med sætbaserede operationer.
  4. Indeksoptimering: Tilføj eller omorganiser fragmenterede indekser.
  5. Parametersniffing: Brug OPTION (RECOMPILE) at generere nye planer.

Eksempel:

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

Regelmæssig overvågning af langsomme forespørgsler med Dynamiske styringsvisninger (DMV'er) som sys.dm_exec_query_stats er en god praksis.


25) Hvad er dynamisk SQL, og hvad er fordelene og risiciene?

Dynamisk SQL giver dig mulighed for at konstruere SQL-sætninger dynamisk under kørsel ved hjælp af variabler.

Eksempel:

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

fordele:

  • Fleksibilitet for variabeltabelnavne eller filtre.
  • Genbrugelig til flere skemaer.

Ulemper:

  • Sårbar overfor SQL Injection hvis ikke parametriseret.
  • Sværere at fejlsøge og vedligeholde.

Brug altid sp_executesql med parametre for sikkerhed.


26) Hvad er midlertidige objekter i T-SQL, og hvordan adskiller de sig?

Midlertidige objekter gemmes i TempDB og hjælpe med at administrere mellemliggende data.

Objektype Anvendelsesområde Eksempel
Lokal temperaturtabel Sessionsspecifik CREATE TABLE #TempTable
Global temperaturtabel Synlig for alle sessioner CREATE TABLE ##TempGlobal
Tabelvariabel Batchspecifik DECLARE @Temp TABLE (...)

Bedste praksis:

  • Foretræk tabelvariabler til mindre datasæt.
  • Brug lokale midlertidige tabeller til større data med indekseringsbehov.
  • Fjern midlertidige tabeller eksplicit for at frigive ressourcer hurtigere.

27) Hvordan bruger man vinduespartitioneringsfunktioner i T-SQL?

Partitionering gør det muligt at anvende vinduesfunktioner på specifikke delmængder af data.

Eksempel:

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

Fordele:

  • Beregner effektivt ranglister, totaler og gennemsnit pr. gruppe.
  • Eliminerer behovet for selvtilslutninger eller underforespørgsler.

Brug sager: Lønintervaller, salgsrangeringer og trendanalyser.


28) Hvad er forskellen mellem UNION og UNION ALL i T-SQL?

Klausul dubletter Ydeevne Use Case
UNION Fjerner dubletter Langsommere (bruger sortering/adskillelse) Ren kombinering af resultatsæt
UNION ALLE Bevarer dubletter Hurtigere Aggregering eller datamigrering

Eksempel:

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers;

Foretrække UNION ALL når dubletter er acceptable, og ydeevnen er vigtig.


29) Hvordan arbejder man med JSON-data i T-SQL?

SQL Server understøtter native JSON-funktioner til parsing og generering af JSON-data.

Eksempel:

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

Nøglefunktioner:

  • JSON_VALUE() → Udtrækker skalarværdier.
  • JSON_QUERY() → Udtrækker objekter/arrays.
  • OPENJSON() → Parser JSON i rækker.
  • FOR JSON → Konverterer forespørgselsresultater til JSON-format.

Nyttig til API'er, hybridsystemer og NoSQL-integrationer.


30) Hvordan kan man administrere og optimere TempDB i SQL Server?

TempDB er en systemdatabase, der er kritisk for midlertidig lagring og versionsstyring. Dårlig administration kan forårsage alvorlige ydeevneproblemer.

Optimeringsteknikker:

  1. Placer TempDB på hurtig lagring (SSD).
  2. Forudindstil størrelsen på data og logfiler.
  3. Brug flere datafiler (1 pr. CPU-kerne op til 8).
  4. Overvåg med sys.dm_db_file_space_usage.
  5. Ryd regelmæssigt op på midlertidige genstande.

Eksempel forespørgsel:

SELECT * FROM sys.dm_db_file_space_usage;

Proaktiv administration af TempDB undgår konflikt på allokeringssider og forbedrer den samlede databasegennemstrømning.


31) Hvad er forespørgselshints i T-SQL, og hvornår skal de bruges?

Forespørgselshints instruerer SQL Server-optimeringsprogrammet i at ændre sin normale udførelsesplan.

De bør bruges sparsomt – kun når du fuldt ud forstår datadistributions- og udførelseskonteksten.

Eksempel:

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

Almindelige tips:

  • NOLOCK: Læser uden låse (kan læse ikke-committede data).
  • FORCESEEK: Tvinger indekssøgning frem i stedet for scanning.
  • OPTIMIZE FOR: Styrer parameterværdier til plangenerering.
  • RECOMPILE: Tvinger genkompilering frem for hver udførelse.

Forsigtig: Overdreven brug af hints kan forringe ydeevnen, efterhånden som data vokser, eller mønstre ændrer sig. Brug dem kun, når optimeringsprogrammets plan beviseligt er ineffektiv.


32) Forklar konceptet med udførelsesplan-caching i SQL Server.

SQL Server cacher udførelsesplaner for at undgå genkompilering ved tilbagevendende forespørgsler.

Når den samme forespørgsel udføres igen med identisk struktur, genbruger den den cachelagrede plan, hvilket forbedrer ydeevnen.

Eksempel:

EXEC GetCustomerOrders @CustomerID = 101;

Fordele:

  • Reducerer CPU-overhead
  • Forbedrer konsistensen i responstiden.

Problemer:

  • Parametersniffing kan føre til ineffektive planer.
  • Overbelastning af plancache kan forbruge hukommelse.

Begrænsning: Brug OPTION (RECOMPILE) or OPTIMIZE FOR UNKNOWN hvor parametrene varierer meget.


33) Hvad er parametersniffing, og hvordan kan det påvirke ydeevnen?

Parametersniffing forekommer, når SQL Server bruger parameterværdier fra den første udførelse af en forespørgsel til at generere en plan, der derefter genbruges – selvom den er suboptimal til senere udførelser.

Eksempel Scenario:

  • Første udførelse: lille datasæt → indekssøgningsplan.
  • Næste udførelse: stort datasæt → samme plan genbrugt, men langsom.

Løsninger:

  1. Brug OPTION (RECOMPILE) at udarbejde nye planer.
  2. Brug lokale variabler til at maskere parameterværdier.
  3. Brug OPTIMIZE FOR or OPTIMIZE FOR UNKNOWN.

Parametersniffing er en af ​​de største syndere i den virkelige verden, når det kommer til uforudsigelig ydeevne i T-SQL.


34) Hvordan overvåger og analyserer man forespørgselsydelse i SQL Server?

Du kan bruge adskillige værktøjer og DMV'er til at profilere og finjustere ydeevne:

  • Udførelsesplaner: Ctrl + M i SSMS eller sys.dm_exec_query_plan.
  • DMV'er:

    • sys.dm_exec_query_stats – CPU og varighed.
    • sys.dm_exec_sql_text – SQL-tekst.
    • sys.dm_exec_requests – Aktive forespørgsler.
  • Ydelsesovervågning og udvidede begivenheder til langsigtet sporing.

Eksempel:

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) Forklar statistikkens rolle i forespørgselsoptimering.

Statistik beskriver datafordeling (f.eks. distinkte værdier, tæthed, histogram), som optimeringsværktøjet bruger til at estimere kardinalitet.

Hvis statistikken er forældet, kan SQL Server vælge dårlige planer.

Nøglekommandoer:

  • UPDATE STATISTICS Employees;
  • sp_updatestats;
  • Indstilling for automatisk opdatering: aktiveret som standard.

Bedste praksis:

  • Holde AUTO_UPDATE_STATISTICS aktiveret.
  • Planlæg manuelle opdateringer for store tabeller.
  • Brug FULLSCAN for kritiske indekser.

Forældet statistik er en stille dræber af præstation.


36) Hvad er forskellen på en indekssøgning og en indeksscanning?

Produktion Beskrivelse Ydeevne Use Case
Indekssøgning Navigerer direkte til matchende rækker Hurtigt Meget selektive forespørgsler
Indeksscanning Læser alle indeksposter sekventielt Langsommere Forespørgsler med lav selektivitet

Eksempel:

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

Optimeringstip: Opret filtrerede eller dækkende indekser for at omdanne scanninger til søgninger.


37) Forklar partitionerede tabeller og deres fordele.

Partitionering opdeler en stor tabel i mindre, håndterbare dele (partitioner), ofte baseret på en intervalkolonne (f.eks. dato).

Fordele:

  • Hurtigere datahåndtering (indlæsning/aflæsning efter partition).
  • Forbedret forespørgselsydeevne på store datasæt.
  • Parallel behandling af partitionerede scanninger.

Eksempel:

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

Brug Case: Datalagre, der håndterer milliarder af rækker, hvor gamle partitioner kan arkiveres effektivt.


38) Hvad er rekursive CTE'er, og hvilke begrænsninger har de?

A rekursivt fælles tabeludtryk (CTE) refererer til sig selv, typisk for hierarkiske data som organisationsdiagrammer eller træstrukturer.

Eksempel:

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;

Begrænsninger:

  • Standard rekursionsgrænse = 100 niveauer.
  • Kan forårsage ydeevneproblemer, hvis rekursionsdybden er høj.
  • Brug OPTION (MAXRECURSION n) at justere grænsen.

39) Hvordan håndterer SQL Server fejl internt i transaktioner?

Når der opstår en fejl i en transaktion:

  • Hvis det er alvorlig (niveau > 20), afbrydes forbindelsen øjeblikkeligt.
  • If ikke-alvorlig, den kan fanges med TRY...CATCH.

Eksempel:

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;

Bedste praksis: Pak altid DML ind i TRY…CATCH for at opnå fejlmodstandsdygtighed.


40) Hvad er nogle avancerede T-SQL-ydeevnejusteringsteknikker?

  1. Undgå skalære UDF'er i SELECT — inline-funktioner er hurtigere.
  2. Brug filtrerede indekser at reducere indeksstørrelsen.
  3. Udnyt OLTP i hukommelsen (Hekaton) for systemer med høj samtidighed.
  4. Udførelse af batchtilstand på columnstore-indekser til analyser.
  5. Eliminer implicitte konverteringer ved at matche datatyper.
  6. Brug forespørgselslager at sammenligne historiske planer.

Eksempel på at detektere implicitte konverteringer:

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%';

Performancejustering er en løbende proces – ikke en engangsbegivenhed.


41) Hvordan ville du identificere de mest ressourcekrævende forespørgsler i SQL Server?

Du kan identificere dyre forespørgsler ved hjælp af dynamiske administrationsvisninger (DMV'er), der registrerer historiske udførelsesstatistikker.

Eksempel:

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;

Nøglemålinger:

  • AvgCPU: Gennemsnitlig CPU-tid pr. udførelse.
  • AvgReadsI/O-intensitet.
  • AvgDurationUdførelseslatenstid.

Denne tilgang hjælper databaseadministratorer med at isolere tunge forespørgsler, før brugerne overhovedet bemærker en forringelse af ydeevnen.


42) Hvordan kan man finde og rette manglende indekser i SQL Server?

SQL Server sporer automatisk manglende indeksanbefalinger via DMV'er.

Eksempel:

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;

Bedste praksis:

  • Prioritér indeks med høj søgefrekvens først.
  • Bekræft via udførelsesplaner før oprettelse.
  • Undgå overindeksering — det forsinker skrivningshastigheden.

43) Hvad er forskellen mellem databasespejling, replikering og logforsendelse?

Feature Formål Realtid Failover Kompleksitet
Spejling Kopi af database med høj tilgængelighed Ja Automatisk Ur Medium
Replication Datafordeling på tværs af databaser Delvis Manuel Høj
Log Forsendelse Backup-baseret DR-strategi Ingen Manuel Lav

Vejledning til brug:

  • Spejling → OLTP-systemer med høj tilgængelighed.
  • Replikering → Distribueret rapportering.
  • Logforsendelse → Opsætning af katastrofegendannelse.

44) Hvordan foretager man fejlfinding af blokeringsproblemer i SQL Server?

Blokering opstår, når én proces har låse, som en anden proces har brug for.

For at identificere blokeringer:

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;

Løsninger:

  • Reducer transaktionslængden.
  • Brug snapshot-isolering.
  • Juster forespørgsler for at minimere låsning.
  • Identificer langvarige åbne transaktioner med DBCC OPENTRAN.

45) Hvordan hjælper SQL Servers Query Store med at optimere ydeevnen?

Query Store indsamler forespørgselstekst, planer og runtime-statistik – hvilket muliggør planregressionsanalyse.

Det hjælper med at identificere, hvornår en forespørgsel pludselig bliver langsom på grund af planændringer.

Eksempel:

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;

Fordele:

  • Sammenlign historiske planer.
  • Tving gode planer frem.
  • Spor præstationstendenser over tid.

46) Hvordan kan man forhindre SQL-injektion i T-SQL-applikationer?

Primære forsvar:

  1. Brug parametriserede forespørgsler via sp_executesql.
  2. Valider og rengør alle brugerinput.
  3. Undgå dynamisk SQL-sammenkædning.
  4. Beskæftige mindste privilegium princippet for databasekonti.

Sikkert eksempel:

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

Selvom SQL-injektion er på applikationsniveau, Databaseadministratorer skal revidere lagrede procedurer og logfiler til uparametriseret udførelse.


47) Hvordan bruger I udvidede hændelser til dybdegående performanceovervågning?

Extended Events (XEvents) er et letvægts framework til ydeevneovervågning – et moderne alternativ til SQL Trace.

Eksempel:

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;

Brug sager:

  • Overvåg forespørgsler med høj CPU.
  • Registrer fastlåste situationer eller manglende indeks.
  • Profilér langvarige udsagn i produktion med minimal overhead.

48) Hvad er filtrerede indekser, og hvornår skal de bruges?

Et filtreret indeks indekserer kun en delmængde af rækker, der opfylder en filterbetingelse – hvilket forbedrer ydeevnen og reducerer lagerplads.

Eksempel:

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

Fordele:

  • Mindre indeksstørrelse.
  • Hurtigere vedligeholdelse.
  • Optimeret til selektive forespørgsler.

Bedst for: Kolonner med skæv datafordeling (f.eks. aktive vs. inaktive poster).


49) Hvordan migrerer man data sikkert mellem SQL Server-miljøer?

Sikker datamigrering indebærer planlægning af konsistens, nedetid og tilbagerulning.

Bedste praksis:

  1. Brug transaktionel replikering or ændre datafangst (CDC) til livesynkronisering.
  2. Deaktiver midlertidigt begrænsninger og udløsere.
  3. Brug BCP or SSIS til masseoverførsel af data.
  4. Valider rækkeantal og kontrolsummer.
  5. Kør altid integritetstjek efter migrering (DBCC CHECKDB).

Eksempel:

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

Test af migreringsscripts i staging er ikke til forhandling.


50) Hvordan identificerer og løser man problemer med parameterfølsomme forespørgsler (PSQ)?

Parameterfølsomme forespørgsler fungerer inkonsistent baseret på parameterværdier – en hyppig udfordring i den virkelige verden.

Opdagelse: Brug Forespørgselsbutik or sys.dm_exec_query_stats at identificere flere planer for én forespørgsel.

Strategier til reparation:

  1. Brug MULIGHED (GENKOMPILER) for hver udførelse.
  2. Brug OPTIMER FOR UKENDTE at lave en generel plan.
  3. Opret planlægningsvejledninger at håndhæve optimale udførelsesstier.
  4. Brug forespørgselstips kun hvis det er nødvendigt.

Parameterfølsomme problemer kræver en balance mellem planstabilitet og forudsigelighed af ydeevne.

🔍 De bedste T-SQL-interviewspørgsmål med virkelige scenarier og strategiske svar

1) Hvad er forskellen mellem INNER JOIN og LEFT JOIN i T-SQL?

Forventet af kandidaten: Intervieweren ønsker at vurdere din forståelse af join-operationer og hvordan datarelationer administreres i SQL-forespørgsler.

Eksempel på svar: An INNER JOIN returnerer kun de rækker, der har matchende værdier i begge tabeller, mens en LEFT JOIN returnerer alle rækker fra venstre tabel sammen med de matchende rækker fra højre tabel. Hvis der ikke er noget match, returneres NULL-værdier for kolonner fra højre tabel. Denne sondring er afgørende, når man arbejder med delvise eller valgfrie relationer i databaser.


2) Hvordan ville du identificere og fjerne dubletter fra en tabel i T-SQL?

Forventet af kandidaten: Intervieweren vil gerne se din evne til at bruge vinduesfunktioner og CTE'er til at håndtere problemer med datakvalitet.

Eksempel på svar: Jeg ville bruge et fælles tabeludtryk (CTE) kombineret med ROW_NUMBER() funktion til at identificere dubletter. For eksempel:

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

Denne tilgang hjælper med at fjerne dubletter, samtidig med at der bevares én unik post for hver gruppe.


3) Kan du forklare, hvad et CTE (Common Table Expression) er, og hvornår du ville bruge det?

Forventet af kandidaten: Intervieweren tjekker din viden om forespørgselsstrukturering og midlertidige resultatsæt.

Eksempel på svar: En CTE er et midlertidigt resultatsæt, der er defineret inden for udførelsesomfanget af en enkelt forespørgsel. Det er nyttigt til at forenkle komplekse joins og underforespørgsler, forbedre læsbarheden og muliggøre rekursive forespørgsler. I min tidligere rolle brugte jeg ofte CTE'er til at opdele flertrins aggregeringslogik i mere vedligeholdelsesvenlige komponenter.


4) Hvordan håndterer du performance tuning i T-SQL-forespørgsler?

Forventet af kandidaten: Intervieweren ønsker at evaluere din erfaring med forespørgselsoptimering og fejlfinding af ydeevne.

Eksempel på svar: Jeg starter med at undersøge udførelsesplanen for at identificere langsomme operationer som tabelscanninger eller dyre joins. Derefter kontrollerer jeg for manglende indeks, redundante underforespørgsler eller ineffektive joins. Jeg analyserer også statistik og bruger indekseringsstrategier, såsom at dække indeks eller filtrerede indeks, for at forbedre ydeevnen. Endelig gennemgår jeg forespørgselslogik for at sikre, at den udnytter sætbaserede operationer i stedet for række-for-række-behandling.


5) Beskriv et tidspunkt, hvor du var nødt til at foretage fejlfinding af en langsomt kørende forespørgsel i produktionen. Hvilke trin tog du?

Forventet af kandidaten: Dette adfærdsspørgsmål evaluerer dine evner til problemløsning og kommunikation i den virkelige verden.

Eksempel på svar: På en tidligere position tog det over 20 minutter at udføre en rapportforespørgsel. Jeg analyserede udførelsesplanen og opdagede, at en af ​​joinsene manglede et indeks på en fremmednøglekolonne. Efter oprettelse af indekset og opdatering af statistikken faldt forespørgselstiden til under 30 sekunder. Jeg dokumenterede også rettelsen og delte den med teamet for at forhindre lignende problemer i fremtiden.


6) Hvad er midlertidige tabeller og tabelvariabler, og hvordan adskiller de sig?

Forventet af kandidaten: Intervieweren tester din forståelse af muligheder for midlertidig datalagring i T-SQL.

Eksempel på svar: Midlertidige tabeller (#TempTable) oprettes i tempdb-databasen og understøtter indekser, begrænsninger og statistikker. Tabelvariabler (@TableVar) gemmes i hukommelsen og har begrænset statistikunderstøttelse, hvilket gør dem velegnede til mindre datasæt. Midlertidige tabeller er bedre til store eller komplekse datasæt, mens tabelvariabler er mere effektive til små, kortlivede data.


7) Hvordan ville du håndtere fejlhåndtering og transaktioner i T-SQL?

Forventet af kandidaten: Intervieweren tjekker din forståelse af transaktionel integritet og håndtering af undtagelser.

Eksempel på svar: Jeg bruger BEGIN TRANSACTION, COMMITog ROLLBACK udsagn for at sikre datakonsistens. Jeg inkluderer også TRY...CATCH blokke til at håndtere fejl problemfrit. For eksempel:

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

Denne fremgangsmåde forhindrer delvise dataopdateringer, når der opstår fejl.


8) Hvordan bruger man vinduesfunktioner i T-SQL, og kan man give et eksempel?

Forventet af kandidaten: Intervieweren ønsker at vurdere dine færdigheder med avancerede analytiske spørgsmål.

Eksempel på svar: Vinduefunktioner tillader beregninger på tværs af sæt af rækker relateret til den aktuelle række uden at skjule data. For eksempel:

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

Dette tildeler rangnumre til medarbejdere baseret på løn, hvilket gør det nemt at analysere præstationstendenser.


9) Fortæl mig om et komplekst T-SQL-projekt, du arbejdede på, og hvordan du greb dets udfordringer an.

Forventet af kandidaten: Intervieweren søger dybde i erfaring, problemløsning og teamwork.

Eksempel på svar: I min sidste rolle byggede jeg en ETL-pipeline til data warehouse ved hjælp af store T-SQL-procedurer. Udfordringen var at håndtere store datamængder effektivt. Jeg optimerede forespørgsler med partitionerede tabeller, trinvise indlæsninger og batchbehandling. Jeg koordinerede også med BI-teamet for at sikre ensartede skemadesigns og forbedret rapporteringshastigheden med over 40 %.


10) Hvordan ville du håndtere en situation, hvor en lagret procedure, du har skrevet, forårsagede en fastlåsning i produktionen?

Forventet af kandidaten: Intervieweren tester din krisehåndtering og tekniske forståelse.

Eksempel på svar: Jeg ville først identificere dødvandet ved hjælp af SQL Servers sys.dm_tran_locks og deadlock-grafer. Derefter analyserede jeg rækkefølgen af ​​ressourceadgang og omstrukturerede proceduren for at opnå låse i en ensartet rækkefølge. I mit tidligere job implementerede jeg også gentagne forsøgslogik for berørte transaktioner og planlagde regelmæssig overvågning for at opdage lignende mønstre tidligt.

Opsummer dette indlæg med: