Tunnista virheet keskeyttämättä suoritusta
TRY ... CATCH-lausuma Transact- SQL: ssä havaitsee ja käsittelee tietokannassovelluksissa esiintyvät virheet. 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 -tietokanta, 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 suoritetaan onnistuneesti, SQL Server yksinkertaisesti siirtyy. Jos TRY-ilmoitus kuitenkin synnyttää virheen, SQL Server suorittaa CATCH-käskyn käsittelemään virhettä huolellisesti.
Perussyntaksissa on seuraava muoto:
BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]TRY ... CATCH Esimerkki
On helpointa ymmärtää tämän lausunnon käyttöä käyttämällä esimerkkiä. 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 1 PRIMARY 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 keskenään käsittelemättömät tiedot. Toiseksi, ja mikä tärkeintä, se aiheuttaa lausunnon keskeytymisen ja voi aiheuttaa sovelluksen kaatumisen.
Vaihtoehtona on kääriä lausunto TRY ... CATCH -ilmoituksessa, kuten alla on esitetty:
Tässä esimerkissä mahdolliset virheet raportoidaan sekä komennon suorittavalle käyttäjälle että hr@foo.com sähköpostiosoitteelle. Käyttäjällä näkyvä virhe ilmestyy alla:
Virhe: PRIMARY KEY -rajoituksen rikkominen "PK_employee_id". Ei voida lisätä päällekkäistä avainta objektissa 'dbo.employees'. Mail-jono.Tärkeintä on, että sovelluksen suoritus jatkuu normaalisti, jolloin ohjelmoija voi käsitellä virheen huolellisesti. TRY ... CATCH -lausekkeen käyttö on tyylikäs tapa havaita ja käsitellä SQL Server -tietokantaohjelmissa esiintyviä virheitä.
Oppiminen lisää
Jos haluat lisätietoja strukturoidusta kyselykielestä, lue Johdatus SQL-muotoon .