SQLShack

felsökning är en av de viktigaste men smärtsamma delarna av någon mjukvaruprocess. För att hitta några fel måste du köra koden steg för steg för att se vilken del av koden som är ansvarig för felet. Detta kallas runtime debugging.

lyckligtvis kommer SQL Server Management Studio (SSMS) med automatiska felsökningsfunktioner för att hjälpa utvecklare att felsöka sina skript. I den här artikeln kommer vi att förklara praktiskt taget hur SSMS kan användas för att felsöka lagrade procedurer i SQL Server genom att arbeta genom ett mycket enkelt exempel.

exempel

för vårt exempel använder vi en lagrad procedur ”spShowOddNumbers” som tar två siffror som parametrar och skriver ut alla udda nummer mellan de två angivna siffrorna.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

skapa procedur spShowOddNumbers
@LowerRange INT,
@UpperRange INT
som
börja
medan(@LowerRange < @UpperRange)
börja
om(@lowerrange%2 != 0)
BEGIN
PRINT @LowerRange
END
SET @LowerRange = @LowerRange + 1
END
PRINT ’tryckta udda tal mellan’ + RTRIM(@lowerRange) + ’ och ’ + RTRIM(@UpperRange)
slut

skriptet som anropar den lagrade proceduren i SQL Server:

1
2
3
4
5
6
7
8
9

deklarera @lowerrange int
SET @lowerrange = 5
deklarera @upperrange INT
SET @upperrange = 20
EXEC spShowOddNumbers @lowerrange, @upperrange
DROP PROC spShowOddNumbers

felsökningsalternativ

i SQL Server Management Studio har du en mängd olika felsökningsalternativ.

starta felsökning

för att starta felsökning av en SQL server-lagrad procedur i SQL Server, tryck på ALT + F5 eller gå till Debug – > starta felsökning, som visas i figuren nedan:

starta felsökning av en lagrad procedur i SQL

börja felsöka en lagrad procedur i SQL

när du har startat felsökaren i fönstret där du ringer din lagrade procedur i SQL Server ser du att det kommer att finnas en gul markör i början av frågefönstret som visas nedan:

 börjar felsöka en lagrad procedur i SQL-gul markörposition

börjar felsöka en lagrad procedur i SQL-gul markörposition

nu har du börjat felsöka kan du gå igenom koden.

steg genom skript

det finns tre alternativ att gå igenom koden: 1) steg över, 2) steg in och 3) steg ut. Du kan se dessa alternativ genom att klicka på Debug som visas på skärmdumpen nedan:

 SQL Server felsökning-steg ut

SQL Server felsökning-steg ut
  1. steg över (F 10)

    steg över flyttar helt enkelt markören till nästa rad av körbart skript. Till exempel, om felsökaren är på följande plats i skriptet:

    SQL Server debugging-steg över-före

    SQL Server debugging-Step over-before

    klicka på Step Over eller trycka på F10 flyttar helt enkelt markören till följande rad:

    SQL Server felsökning-steg över-efter

    SQL Server felsökning-steg över-efter
  2. steg in (F 11)

    Detta är en av de viktigaste och mest användbara felsökningsfunktionerna. Med Step Into kan du bryta dig in i det lagrade procedurskriptet från skriptet som anropar den lagrade proceduren.

    det är viktigt att nämna att steg in fungerar som steg över. Om skriptraden som körs inte innehåller något anrop till den lagrade proceduren i SQL Server.

    till exempel om du går in på:

    1
    ange @upperrange = 20

    felsökaren flyttar helt enkelt kontrollen till nästa rad:

    1
    EXEC spShowOddNumbers @lowerrange, @upperrange

    ovanstående rad innehåller ett samtal till den lagrade proceduren i SQL Server. Nu om du kliver in på denna rad av skript, debugger tar dig till skriptet av ’spShowOddNumbers’ lagrade proceduren som visas i följande figur.

     SQL Server felsökning-steg in

    SQL Server felsökning-steg in
  3. steg ut (Skift + F11)

    steg ut är motsatsen till steg in. Om du är inne i en lagrad procedur i SQL Server och du vill gå tillbaka till skriptet som anropar den lagrade proceduren kan du använda Step Out. Till exempel, om du klickar steg över på:

    1
    medan (@LowerRange & lt; @UpperRange)

    felsökaren tar dig tillbaka till skriptet som kallar funktionen, dvs

    SQL Server debugging-steg ut

    SQL Server felsökning-steg ut

kör till markören

felsökningsalternativ kör en rad i taget. Om det finns en slinga eller en lång kod som du vill att felsökaren ska hoppa över kan du använda alternativet Kör till markör.

1
medan (@LowerRange < @UpperRange)

till exempel om markören är på följande rad i den lagrade proceduren i SQL Server och du vill hoppa över slingan och gå till utskriftssatsen efter slingan. Du kan helt enkelt gå utskriftssatsen och klicka på ”Kör till markör” som visas nedan:

SQL Server felsökning-kör till markören

SQL Server debugging-kör till markören

slingan hoppas över och markören pekar nu på utskriftssatsen.

det lokala fönstret

det lokala fönstret hjälper dig att hålla reda på värdena för variablerna i skriptet. I det här exemplet har vi två variabler @LowerRange och @UpperRange i vårt manus. I början av while-slingan i den lagrade proceduren i SQL Server är värdet på @ LowerRange-variabeln 5 medan @ UpperRange-variabeln är 20 som visas i figuren nedan:

SQL Server debugging-det lokala fönstret

SQL Server debugging - det lokala fönstret

när du kör slingan och sedan kontrollerar värdet på variablerna ser du att variablerna @LowerRange och @UpperRange båda visar 20 som deras värde. Fönstret lokalbefolkning visar variabelns namn, värde och typ. Med hjälp av Locals fönstret gör det mycket enkelt att kan hålla koll på förändringar i värdena för dina variabler som du framsteg genom skriptet.

om du stänger Lokalfönstret av misstag och vill ta tillbaka det kan du helt enkelt gå till Debug – > Windows – > lokalbefolkningen som visas nedan:

SQL Server felsökning-steg över-lokala variabler

SQL Server debugging-steg över lokala variabler

Klockfönstret

Klockfönstret är mycket lik Lokalfönstret. Den enda skillnaden är att du kan lägga till eller ta bort variabler från Klockfönstret, vilket kan vara användbart när du arbetar med ett stort antal variabler i större skript.

för att lägga till en variabel i Klockfönstret, välj bara variabeln, högerklicka och välj sedan ”Lägg till klocka” som visas på följande skärmdump:

SQL Server felsökning i SSMS-lägga till en klocka

SQL Server-felsökning i SSMS-lägga till en klocka

på samma sätt, för att ta bort en variabel, högerklicka på variabelns namn i Klockfönstret och klicka på ”Ta bort klocka” från listan med alternativ. Som visas nedan:

 SQL Server felsökning i SSMS-radera en klocka

SQL Server-felsökning i SSMS-radera en klocka

Samtalsstacken

Samtalsstacken, som namnet antyder, visar stapeln med samtal som har körts fram till den aktuella punkten.

 SQL Server felsökning i SSMS-samtalet stack

SQL Server-felsökning i SSMS-samtalsstacken

den första raden i Samtalstacken i figuren ovan berättar att för närvarande spShowOddNumbers lagrade proceduren körs och för närvarande är felsökaren på rad 14 i filen som innehåller denna lagrade procedur. Den andra raden indikerar att denna lagrade procedur anropades från skriptet på rad 7 i SQLQuery2.sql-fil.

det omedelbara fönstret

det omedelbara fönstret liknar konsolfönstret. Du kan till exempel utföra matematiska operationer i det omedelbara fönstret, kontrollera värdena för variabler etc. Följande skärmdump innehåller ett exempel på ett omedelbart fönster.

SQL Server felsökning i SSMS-omedelbar fönster

SQL Server felsökning i SSMS-omedelbar fönster

Obs: CLS kommandot rensar omedelbar fönster!

brytpunkter

en brytpunkt är ett av de vanligaste felsökningsverktygen i något programmeringsspråk. Breakpoint kan du ange den plats där du vill att din debugger att sluta köra koden. De kommer särskilt till nytta när du inte vill felsöka alla kodrader, snarare vill du kontrollera status för variabler på specifika platser i din kod.

för att sätta en brytpunkt i din kod, högerklicka bara på det grå området till vänster om raden i skriptet där du vill placera din brytpunkt. Alternativt lägger du till en brytpunkt till linjen genom att trycka på F9. Om du trycker på F9-tangenten igen tas brytpunkten bort.

 SQL Server felsökning i SSMS-brytpunkter

SQL Server-felsökning i SSMS-brytpunkter

du kan se i figuren ovan att en brytpunkt har lagts till i raden som kör ”spShowOddNumbers” lagrad procedur i SQL Server. Nu, felsöka detta skript. Du kommer att se att felsökaren startar vid första raden i skriptet.

 SQL Server-felsökning i SSMS-felsökaren som börjar i skriptets första rad

SQL Server-felsökning i SSMS-felsökaren som börjar i skriptets första rad

tryck nu på ALT + F5 eller gå till felsökningsmenyn igen och klicka på Debug -> Fortsätt. Du kommer att se att istället för att felsöka nästa rad hoppar felsökaren direkt till närmaste linje med brytpunkten.

 SQL Server felsökning i SSMS-lägga till en klocka-Tryck ALT + F5

SQL Server felsökning i SSMS-lägga till en klocka-Tryck ALT + F5

du kan också skapa villkorliga brytpunkter. Villkorliga brytpunkter träffas endast när angivna villkor är uppfyllda.

för att ange ett villkor på brytpunkten, högerklicka bara på brytpunkten och välj ”villkor” som visas i figuren nedan:

 felsökning av en SQL Server-lagrad procedur i SSMS-villkor

felsökning av en SQL Server-lagrad procedur i SSMS-villkor

ett nytt fönster öppnas där du kan ange villkoren som ska uppfyllas innan en brytpunkt kan träffas. Om du vill att denna Brytpunkt bara ska träffas när @LowerRange är större än 15, kan du lägga till detta som villkor, som visas i bilden nedan:

felsökning av en SQL Server - lagrad procedur i SSMS-Inställningsvariabler för ett villkor

slutsats

i den här artikeln diskuterade vi vilka olika alternativ som Microsoft SQL Server Management Studio tillhandahåller för felsökning av ett skript eller lagrad procedur i SQL Server.

andra bra artiklar från Ben

hur man använder SQL Server inbyggda funktioner och skapa användardefinierade skalära funktioner

hur man använder fönsterfunktioner

felsökning lagrade procedurer i SQL Server Management Studio (SSMS)

  • författare
  • Senaste inlägg
Ben Richardson
Ben Richardson Driver Acuity Training en ledande leverantör av SQL-utbildning i Storbritannien. Det erbjuder ett komplett utbud av SQL-utbildning från introduktionskurser till avancerad administration och datalagerutbildning – se här för mer information. Acuity har kontor i London och Guildford, Surrey. Han bloggar också ibland på Acuitys blogg
Visa alla inlägg av Ben Richardson

Ben Richardson
Senaste inlägg av Ben Richardson (se alla)
  • arbeta med Power BI-rapportteman-25 februari 2021
  • Power BI: Vattenfallsdiagram och kombinerade bilder-19 januari 2021
  • Power BI: Villkorlig formatering och datafärger i aktion – januari 14, 2021