שימוש ב TRY / CATCH לטיפול בשגיאות שרת SQL

click fraud protection

משפט TRY / CATCH ב- Transact-SQL מזהה ומטפל בתנאי שגיאה ביישומי מסד נתונים. אמירה זו היא אבן הפינה של SQL טיפול בשגיאות שרת והוא חלק חשוב בפיתוח יישומי בסיס נתונים חזקים.

TRY / CATCH חל על שרת SQL החל משנת 2008, מסד הנתונים של תכלת הרקיע, מחסן הנתונים של תכלת הרקיע, ומחסן נתונים מקבילי.

היכרות עם TRY / CATCH

TRY./CATCH פועל על ידי ציון שתי הצהרות Transact-SQL: אחת שתרצה "לנסות" ואחת שתשתמש בה כדי "לתפוס" את כל השגיאות שעלולות להופיע. כאשר SQL Server נתקל בהצהרת TRY / CATCH, היא מבצעת באופן מיידי את המשפט הכלול בסעיף TRY. אם משפט TRY מבוצע בהצלחה, שרת SQL עובר הלאה. עם זאת, אם משפט TRY מייצר שגיאה, SQL Server מבצע את משפט CATCH כדי לטפל בשגיאה בחן.

התחביר הבסיסי לובש צורה זו:

התחל לנסות
{sql_statement | חסימת הצהרה}
נסו
התחל לתפוס
[{sql_statement | statement_block}]
לתפוס סוף
[; ]

TRY / CATCH דוגמה

שקול מסד נתונים של משאבי אנוש המכיל טבלה בשם עובדים, המכיל מידע על כל אחד מהעובדים בחברה. טבלה זו משתמשת במספר מזהה עובד שלם בתור ה- מפתח ראשי.

אתה יכול לנסות להשתמש בהצהרה שלמטה כדי להכניס עובד חדש למסד הנתונים שלך:

instagram viewer
הכנס עובדים (מזהה, שם פרטי, שם משפחה, סיומת)
ערכים (12497, 'מייק', 'צ'אפל', 4201)

בנסיבות רגילות, הצהרה זו תוסיף שורה לטבלת העובדים. עם זאת, אם עובד עם מזהה 12497 כבר קיים במסד הנתונים, הכנסת השורה תפר את אילוצי המפתח העיקרי ותביא לשגיאה הבאה:

מס '2627, רמה 14, מדינה 1, שורה 1
הפרה של אילוץ המפתח העיקרי 'PK_ Employee_id'. לא ניתן להכניס מפתח כפול לאובייקט 'dbo.employees'.
ההצהרה הופסקה.

אמנם שגיאה זו מספקת לך את המידע הדרוש לך כדי לפתור את הבעיה, אך יש בה שתי בעיות. ראשית, ההודעה מוצפנת. הוא כולל קודי שגיאה, מספרי שורות ומידע אחר שאינו מובן למשתמש הממוצע. שנית, וחשוב מכך, היא גורמת לביטול ההצהרה ועלולה לגרום לקריסת יישום.

האלטרנטיבה היא לעטוף את ההצהרה בהצהרה TRY... CATCH, כפי שמוצג כאן:

התחל לנסות
הכנס עובדים (מזהה, שם פרטי, שם משפחה, סיומת)
ערכים (12497, 'מייק', 'צ'אפל', 4201)
נסו
התחל לתפוס
הדפס 'שגיאה:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'דואר עובדים',
@recipients = '[email protected]',
@body = 'אירעה שגיאה ביצירת רשומת עובדים חדשה.',
@subject = 'שגיאת מאגר עובדים';
לתפוס סוף

בדוגמה זו, כל שגיאה שמתרחשת מדווחת הן למשתמש שמבצע את הפקודה והן לכתובת הדואר האלקטרוני [email protected]. השגיאה שהוצגה למשתמש היא:

שגיאה: הפרה של אילוץ מפתח PRIMARY KEY 'PK_employee_id'. 
לא ניתן להכניס מפתח כפול לאובייקט 'dbo.employees'.
דואר בתור.

ביצוע היישומים ממשיך כרגיל ומאפשר למתכנת לטפל בשגיאה. שימוש בהצהרת TRY / CATCH הוא דרך אלגנטית לאתר ולטפל באופן יזום בשגיאות המתרחשות ביישומי מסד נתונים של SQL Server.

ללמוד עוד

למידע נוסף על שפת השאילתות המובנית, עיין במאמר שלנו יסודות SQL.

instagram story viewer