TRY … CATCH-satsen i Transact-SQL upptäcker och hanterar felförhållanden i databasprogram. Detta uttalande är hörnstenen i SQL Server-felhantering och är en viktig del i utvecklingen av robusta databasprogram. TRY … CATCH gäller för SQL Server från och med 2008, Azure SQL Database, Azure SQL Data Warehouse och Parallell Data Warehouse.
Introducerar TRY … CATCH
TRY … CATCH fungerar genom att du kan ange två Transact-SQL-satser: en som du vill "försöka" och en annan att använda för att "fånga" eventuella fel som kan uppstå. När SQL Server möter ett TRY … CATCH-meddelande, utförs det omedelbart det uttalande som ingår i TRY-klausulen. Om TRY-förklaringen körs framgångsrikt, går SQL Server vidare. Om emellertid TRY-satsen genererar ett fel, kör SQL Server CATCH-satsen för att hantera felet graciöst.
Den grundläggande syntaxen tar denna form:
BEGIN TRY uttalande block SLUTSÖKBEGIN FÅNGsql_statementSLUTGÅNG ; Det är lätt att förstå användningen av detta uttalande genom ett exempel. Tänk dig att du är administratör för en personaldatabas som innehåller en tabell med namnet "Medarbetare", som innehåller information om var och en av de anställda i din organisation. Den tabellen använder ett heltal medarbetar-ID-nummer som primär nyckel. Du kan försöka använda nedanstående uttalande för att infoga en ny anställd i din databas: INSERT INTO anställda (id, förnamn, efternamn, tillägg)Värden (12497, "Mike", "Chapple", 4201)
Under normala omständigheter skulle detta uttalande lägga till en rad i Medarbetarbordet. Om en anställd med ID 12497 redan existerar i databasen, skulle emellertid infogningen av raden strida mot primärnyckeln och resultera i följande fel: Msg 2627, Level 14, State 1, Line 1Brott mot PRIMARY KEY-begränsningen "PK_employee_id". Kan inte infoga dubbla nyckel i objektet 'dbo.employees'.Uttalandet har avslutats.
Medan det här felet ger dig informationen du behöver för att felsöka problemet, finns det två problem med det. För det första är meddelandet kryptiskt. Den innehåller felkoder, radnummer och annan information som är oförståelig för den genomsnittliga användaren. För det andra, och ännu viktigare, får det uttalandet att avbryta och kan orsaka en programkrasch.Alternativet är att pakka in satsen i ett TRY … CATCH-meddelande, som visas här: BEGIN TRYINSERT INTO anställda (id, förnamn, efternamn, tillägg)Värden (12497, "Mike", "Chapple", 4201)SLUTSÖKBEGIN FÅNGPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Employee Mail',@recipients = '[email protected]',@body = 'Ett fel inträffade för att skapa en ny anställningsrekord.',@subject = 'Medarbetar ID dupliceringsfel';SLUTGÅNG
I det här exemplet rapporteras eventuella fel som uppstår till både användaren som utför kommandot och e-postadressen [email protected]. Felet som visas för användaren är: Fel: Överträdelse av PRIMARY KEY-begränsning "PK_employee_id". Kan inte infoga dubbla nyckel i objektet 'dbo.employees'.Postkö
Programkörning fortsätter normalt, så att programmeraren kan hantera felet. Användning av TRY … CATCH-satsen är ett elegant sätt att proaktivt detektera och hantera fel som uppstår i SQL Server-databasprogram. Om du vill lära dig mer om det strukturerade fråge språket, kolla in Introduktion till SQL. TRY … CATCH Exempel
Lära sig mer