TRY … CATCH-lausuma Transact-SQL: ssä havaitsee ja käsittelee tietokannassovelluksissa tapahtuvia virheitä. Tämä toteamus on SQL Serverin virheenkäsittelyn kulmakivi ja se on tärkeä osa kehittää vankkoja tietokantaohjelmia. TRY … CATCH koskee SQL Serveria vuodesta 2008 alkaen, Azure SQL Database, Azure SQL Data Warehouse ja Parallel Data Warehouse.
Esittely TRY … CATCH
TRY … CATCH toimii antamalla sinun määrittää kaksi Transact-SQL-lausetta: yksi, jonka haluat "yrittää" ja toinen käyttämään "kiinni" mahdollisia virheitä. Kun SQL Server havaitsee TRY … CATCH -lausuman, se suorittaa välittömästi TRY-lausekkeeseen sisältyvän lausunnon. Jos TRY-ilmoitus toteutetaan onnistuneesti, SQL Server siirtyy. Jos TRY-ilmoitus kuitenkin synnyttää virheen, SQL Server suorittaa CATCH-käskyn käsitellä virheen gracefully.
Perussyntaksissa on seuraava muoto:
BEGIN TRY lausuma lohko END TRYBEGIN CATCHsql_statementEND CATCH ; Esimerkin avulla on helppo ymmärtää tämän lausunnon käyttö. Kuvittele, että olet henkilöstötietokannan ylläpitäjä, joka sisältää taulukon nimeltä "Työntekijät", joka sisältää tietoja organisaatiosi kaikista työntekijöistä. Tämä taulukko käyttää ensisijaisena avaimenaan kokonaislukuisen työntekijän ID-numeron. Voit yrittää käyttää alla olevaa lausetta lisätäksesi uuden työntekijän tietokantaan: INSERT INTO työntekijät (id, first_name, last_name, extension)ARVOT (12497, 'Mike', 'Chapple', 4201)
Normaalioloissa tämä lausuma lisää rivin Työntekijöiden taulukkoon. Jos tietokannassa on jo henkilö, jolla on tunnus 12497, rivin lisääminen rikkoisi ensisijaista avainrajoitusta ja seuraisi seuraavia virheitä: Msg 2627, taso 14, tila 1, rivi 1PRIMARY KEY -rajoituksen rikkominen "PK_employee_id". Ei voida lisätä päällekkäistä avainta objektissa 'dbo.employees'.Lausunto on päättynyt.
Vaikka tämä virhe tarjoaa sinulle ongelman vianmäärityksen, sen kanssa on kaksi ongelmaa. Ensinnäkin viesti on salaperäinen. Se sisältää virhekoodit, rivinumerot ja muut tiedot, jotka ovat keskenään käsittämättömät. Toiseksi, ja mikä tärkeintä, se aiheuttaa lausunnon keskeytymisen ja voi aiheuttaa sovelluksen kaatumisen.Vaihtoehtona on kääriä lausunto TRY … CATCH-lausunnossa, kuten tässä on esitetty: BEGIN TRYINSERT INTO työntekijät (id, first_name, last_name, extension)ARVOT (12497, 'Mike', 'Chapple', 4201)END TRYBEGIN CATCHTULOSTUSVIRHE: '+ ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Employee Mail',@recipients = '[email protected]',@body = 'Virheestä syntyi uusi työntekijän tietue.',@subject = 'Työntekijän tunnus monistusvirhe';END CATCH
Tässä esimerkissä mahdolliset virheet raportoidaan sekä komennon suorittavalle käyttäjälle että [email protected] sähköpostiosoitteelle. Käyttäjälle näytetty virhe on: Virhe: PRIMARY KEY -rajoituksen rikkominen "PK_employee_id". Ei voida lisätä päällekkäistä avainta objektissa 'dbo.employees'.Mail-jono.
Sovellusten suoritus jatkuu normaalisti, mikä mahdollistaa ohjelmoijan käsittelemään virheen. TRY … CATCH -lausekkeen käyttö on tyylikäs tapa havaita ja käsitellä SQL Server -tietokantaohjelmissa esiintyviä virheitä. Jos haluat lisätietoja rakenteellisesta kyselykielestä, tutustu Johdatus SQL-ohjelmaan. TRY … CATCH Esimerkki
Oppiminen lisää