מדריך שלב אחר שלב כדי להשתמש TRY ... CATCH לטפל שגיאות SQL Server

זהה שגיאות מבלי להפריע לביצוע

TRY ... הצהרה CATCH ב Transact- SQL מזהה ומטפל בתנאי השגיאה ביישומי מסד הנתונים שלך. הצהרה זו היא אבן הפינה של טיפול בשגיאות של SQL Server והיא חלק חשוב בפיתוח יישומי מסד נתונים חזקים. TRY ... CATCH חל על SQL Server החל משנת 2008, מסד נתונים Azure SQL, Azure SQL Data Warehouse ומקבץ נתונים מקבילים.

היכרות עם TRY..CATCH

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

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

התחילו לנסות {sql_statement אנא בטל את התחלת הקטץ '[{sql_statement | statement_block}] CATCH END [; ]

TRY ... דוגמה CATCH

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

INSERT INTO (ID, first_name, last_name, Extension) VALUES (12497, 'Mike', 'Chapple', 4201)

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

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

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

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

התחילו לנסות להיכנס לעובדים (id, first_name, last_name, Extension) VALUES (12497, 'Mike', 'Chapple', 4201) סוף נסה להתחיל בתדפיס 'שגיאה:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail Employee', @recipients = 'hr@foo.com', @body = 'אירעה שגיאה ביצירת רשומת עובדים חדשה'., @subject = 'Error ID שכפול שגיאה'; END CATCH

בדוגמה זו, כל השגיאות המתרחשות מדווחות הן למשתמש שביצע את הפקודה ואת כתובת הדואר האלקטרוני hr@foo.com. השגיאה המוצגת למשתמש מופיעה בהמשך:

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

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

ללמוד עוד

אם ברצונך ללמוד עוד על שפת השאילתה המובנית, קרא את מבוא ל- SQL .