א שריט-דורך-שריט גייד צו נוצן טרע ... זוכן פֿאַר סקל סערווער ערראָרס

ידענטיפיצירן ערראָרס אָן ינעראַפּטינג דורכפירונג

די TRY ... CATCH ויסזאָגונג אין טראַנסאַקט- סקל דיטעקץ און כאַנדאַלז טעות טנאָים אין דיין דאַטאַבאַסע אַפּלאַקיישאַנז. דעם דערקלערונג איז די קאָרנערסטאָון פון סקל סערווירער טעות האַנדלינג און איז אַ וויכטיק טייל פון דעוועלאָפּינג געזונט דאַטאַבייס אַפּלאַקיישאַנז. TRY ... CATCH אַפּלייז צו סקל סערווירער סטאַרטינג מיט 2008, אַזורע סקל דאַטאַבאַסע, אַזורע סקל דאַטאַ וואַרעהאָוסע און פּאַראַללעל דאַטאַ וואַרעהאָוסע.

Introducing TRY..CATCH

TRY ... זוכן איצט דורך: CATCH works by allowing you to specify two Transact-SQL statements: one that you want to "try" and another to use to "catch" any errors that may arise. ווען סקל סערווירער ינקאַונטערז אַ TRY ... זוכן שטימען, עס מיד עקסאַקיוץ די דערקלערונג אַרייַנגערעכנט אין די אמת פּונקט. אויב דער אמתע ויסזאָגונג עקסאַקיוץ הצלחה, סקל סערווירער פשוט באוועגט אויף. אָבער, אויב דער TRY סטאַטעמענט דזשענערייץ אַ טעות, SQL Server עקסאַקיוץ די CATCH דערקלערונג צו גראַציעז שעפּן די טעות.

די גרונט סינטאַקס נעמט דעם פאָרעם:

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

TRY ... CATCH בייַשפּיל

עס איז יזיאַסט צו פֿאַרשטיין די נוצן פון דעם סטאַטעמענט דורך די נוצן פון אַ בייַשפּיל. ימאַגינע אַז איר זענט דער אַדמיניסטראַטאָר פון אַ מענטש רעסאָורסעס דאַטאַבאַסע אַז כּולל אַ טיש געהייסן "עמפּלויעעס," מיט אינפֿאָרמאַציע וועגן יעדער פון די עמפּלוייז אין דיין אָרגאַניזאַציע. אַז טיש ניצט אַ ינטאַדזשער אָנגעשטעלטער שייַן נומער ווי די ערשטיק שליסל . איר קענט פּרווון ניצן די דערקלערונג אונטן צו טאָן אַ נייַ אָנגעשטעלטער אין דיין דאַטאַבאַסע:

ינסערט אין עמפּלוייז (שייַן, ערשטער_נאַמע, לעצט_נאַמע, פאַרלענגערונג) ווערט (12497, 'מייק', 'טשאַפּפּלע', 4201)

אונטער נאָרמאַל צושטאנדן, דעם סטאַטעמענט וואָלט לייגן אַ רודערן צו די עמפּלויעעס טיש. אָבער, אויב אַן אָנגעשטעלטער מיט ID 12497 איז שוין אין די דאַטאַבאַסע, ינסערטינג די רודערן וואָלט פאַרלאָזן די ערשטיק שליסל קאַנסטריינט און רעזולטאַט אין דער ווייַטערדיק טעות:

מסס 2627, Level 14, State 1, Line 1 Violation of PRIMARY KEY constraint 'PK_employee_id'. קענען נישט אַרייַננעמען דופּליקאַט שליסל אין כייפעץ 'דבאָ.עמפּלויעעס'. די דערקלערונג איז געווען טערמאַנייטיד.

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

דער אָלטערנאַטיוו איז צו ייַנוויקלען די דערקלערונג אין אַ אמת ... זוכן שטעקן, ווי געוויזן אונטן:

BEGIN TRY INSERT אין עמפּלוייז (שייַן, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN CATCH PRINT 'טעות:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'עמפּלויעע מעיל', @recipients = 'hr@foo.com', @body = 'אַ טעות געפונען שאפן אַ נייַ אָנגעשטעלטער רעקאָרד.', @סובדזשעקט = 'עמפּלויעע שייַן דופּליקאַטיאָן טעות'; END CATCH

אין דעם בייַשפּיל, קיין ערראָרס אַז פּאַסירן זענען געמאלדן צו ביידע דער באַניצער עקסאַקיוטינג די באַפֿעל און די בליצפּאָסט אַדרעס hr@foo.com. דער טעות געוויזן צו דער באַניצער איז אונטער:

טעות: פיילינג PRIMARY KEY קאָנסטרוקט 'PK_employee_id'. קענען נישט אַרייַננעמען דופּליקאַט שליסל אין כייפעץ 'דבאָ.עמפּלויעעס'. Mail queued.

רובֿ ימפּאָרטאַנטלי, אַפּלאַקיישאַן דורכפירונג האלט נאָרמאַללי, אַלאַוינג די פּראָגראַמיסט צו גראַטוללי שעפּן די טעות. ניצן די TRY ... CATCH statement איז אַן עלעגאַנט וועג צו פּראָאַקטיוולי דיטעקט און שעפּן ערראָרס וואָס פּאַסירן אין סקל סערווירער דייטאַבייס אַפּלאַקיישאַנז.

לערנען מער

אויב איר ווילן צו לערנען מער וועגן די סטרוקטורעד קווערי שפּראַך, לייענען די הקדמה צו סקל .