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:
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:
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:
- 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:
klicka på Step Over eller trycka på F10 flyttar helt enkelt markören till följande rad:
- 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å:
1ange @upperrange = 20felsökaren flyttar helt enkelt kontrollen till nästa rad:
1EXEC spShowOddNumbers @lowerrange, @upperrangeovanstå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.
- 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å:
1medan (@LowerRange & lt; @UpperRange)felsökaren tar dig tillbaka till skriptet som kallar funktionen, dvs
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:
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:
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:
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:
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:
Samtalsstacken
Samtalsstacken, som namnet antyder, visar stapeln med samtal som har körts fram till den aktuella punkten.
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.
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.
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.
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.
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:
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:
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
Visa alla inlägg av Ben Richardson
- 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