TRY-г ашиглах алхам алхмаар заавар ... SQL Server-ийн алдааг зохицуулах CATCH

Гүйцэтгэл тасалдалгүйгээр алдааг олж тогтоох

TRY ... Transact- SQL дахь CATCH мэдэгдэл нь таны өгөгдлийн сангийн програмууд дахь алдааны нөхцөлийг илрүүлдэг. Энэ нь SQL Server-ийн алдаатай холбоотой тулгын чулуу юм. Энэ нь өгөгдлийн сангийн сайн програмуудыг хөгжүүлэх чухал хэсэг юм. TRY ... CATCH нь 2008 оноос эхэлсэн SQL Server, Azure SQL мэдээллийн сан, Azure SQL өгөгдлийн агуулах болон Зэрэгцээ өгөгдлийн агуулахд хамаарна.

TRY..CATCH танилцуулга

TRY ... CATCH танд хоёр Transact-SQL мэдэгдлийг заах боломжийг олгосноор та "оролдлого" хийхийг хүсдэг бөгөөд өөр нэг алдаа гарах магадлалтай "барьж" ашиглахад ашигладаг. SQL Server TRY заалтанд орсоны дараа TRY заалтад орсон мэдэгдлийг гүйцэтгэх болно. TRY мэдэгдэл амжилттай хэрэгжсэн бол SQL Server зүгээр л хөдөлдөг. Гэсэн хэдий ч, TRY мэдэгдэл алдаа үүсгэдэг бол SQL Server нь CATCH мэдэгдэлийг алдаатай зохицуулахын тулд гүйцэтгэдэг.

Үндсэн синтакс нь энэ хэлбэрийг авдаг.

BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]

TRY ... CATCH Жишээ

Жишээ нь энэ мэдэгдлийн хэрэглээг ойлгоход хялбар байдаг. Та байгууллагынхаа ажилтнуудын талаарх мэдээллийг агуулсан "Ажиллагсад" нэртэй хүснэгт бүхий хүний ​​нөөцийн мэдээллийн санг удирдагч гэж үзье. Энэ хүснэгтэд ажилтны ID дугаарыг анхдагч түлхүүр болгон ашигладаг. Та шинэ ажилтан таны өгөгдлийн санд оруулахын тулд доорх тайланг ашиглахыг оролдож болно:

INSERT INTO (id, first_name, last_name, өргөтгөл) VALUES (12497, 'Mike', 'Chapple', 4201)

Хэвийн нөхцөлд энэ мэдэгдэл нь Ажилчдын хүснэгтэнд мөр нэмэх болно. Гэхдээ 12497 дугаартай ажилтан нь өгөгдлийн санд байгаа бол эгнээ оруулах нь үндсэн гол бэрхшээлийг зөрчиж дараах алдаа гарна:

Msg 2627, Түвшин 14, Төрийн 1, Мөр 1 PRIMARY KEY хязгаарлалт 'PK_employee_id' гэсэн зөрчил. Объект 'dbo.employees' -д давхардсан түлхүүр оруулах боломжгүй. Тайлбар дуусгавар болсон байна.

Энэ алдаа нь танд асуудлыг шийдвэрлэхэд хэрэгтэй мэдээллээр хангадаг боловч энэ хоёр асуудал байдаг. Нэгдүгээрт, зурвас нууцлаг байна. Энэ нь дунджаар хэрэглэгчийн хувьд алдааны код, мөрийн дугаар болон бусад мэдээлэл орно. Хоёрдугаарт, илүү чухал нь энэ нь цуцлахад хүргэдэг бөгөөд энэ нь програмыг сүйрэлд хүргэж болзошгүй юм.

Өөрөөр хэлбэл, TRY дээр CATCH мэдэгдэлийг оруулаад дараах байдлаар харуулсан болно:

БИДНИЙ АЖИЛЛАГААНЫ АЖИЛТ (id, first_name, last_name, өргөтгөл) VALUES (12497, 'Майк', 'Chapple', 4201) END TRY BEGIN CATCH PRINT 'Error:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr@foo.com', @body = 'Ажилчдын шинэ бичлэгийг үүсгэсэн алдаа гарсан.', @subject = 'Ажилтны ID хувилбарын алдаа'; END CATCH

Энэ жишээн дээр гарсан алдаануудыг тушаалыг гүйцэтгэх хэрэглэгч болон hr@foo.com имэйл хаягийг хоёуланд нь мэдээлдэг. Хэрэглэгчдэд үзүүлсэн алдаа доор харагдаж байна:

Алдаа: PRIMARY KEY хязгаарлалт 'PK_employee_id' зөрчигдсөн байна. Объект 'dbo.employees' -д давхардсан түлхүүр оруулах боломжгүй. Захидал хүлээнэ.

Хамгийн чухал нь програмын гүйцэтгэл хэвийн үргэлжлэх бөгөөд программист алдааг нарийн зохицуулах боломжийг олгодог. TRY-ийг ашиглах ... CATCH мэдэгдэл нь SQL серверийн өгөгдлийн сангийн програмуудад тохиолддог алдаануудыг идэвхтэй илрүүлэх, зохицуулах гоёмсог арга юм.

Илүү ихийг сурах

Хэрэв та Structured Query Language-н талаар дэлгэрэнгүй мэдэхийг хүсвэл SQL-ийн танилцуулгыг унших.