Skip to main content

באמצעות TRY ... CATCH לטפל שגיאות SQL Server

Section, Week 2 (יוני 2026)

Section, Week 2 (יוני 2026)
Anonim

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 כדי לטפל בשגיאה בחן.

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

להתחיל לנסות בלוק הצהרה END TRYהתחל לתפוסsql_statementEND CATCH ;

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, כפי שמוצג כאן:

להתחיל לנסותINSERT INTO (id, first_name, last_name, extension)VALUES (12497, 'Mike', 'Chapple', 4201)END TRYהתחל לתפוסPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'דואר עובד',@recipients = '[email protected]',@body = 'ארעה שגיאה ביצירת רשומת עובד חדשה'.,@subject = 'שגיאת שכפול מזהה עובד';END CATCH

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

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

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

ללמוד עוד

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