Ნაბიჯ ნაბიჯ გზამკვლევი toUsing TRY ... CATCH გაუმკლავდეს SQL Server შეცდომები

შეცდომების იდენტიფიცირება აღსრულების შეწყვეტის გარეშე

TRY ... CATCH განცხადებაში Transact- SQL იკვლევს და ამუშავებს შეცდომებს თქვენს მონაცემთა ბაზაში. ეს განცხადება SQL Server შეცდომის ქვაკუთხედია და წარმოადგენს მონაცემთა ბაზის ძლიერი პროგრამების განვითარებას. TRY ... CATCH ვრცელდება SQL Server დაწყებული 2008, Azure SQL მონაცემთა ბაზა, Azure SQL მონაცემთა საწყობი და პარალელური მონაცემთა საწყობი.

გაცნობა TRY..CATCH

TRY ... CATCH მუშაობს საშუალებას გაძლევთ განსაზღვროთ ორი Transact-SQL განცხადებები: ერთი, რომ გსურთ "სცადოთ" და სხვა გამოიყენოს "დაიჭიროთ" ნებისმიერი შეცდომები, რომელიც შეიძლება წარმოიშვას. როდესაც SQL Server შეტაკებები TRY ... CATCH განაცხადი, იგი დაუყოვნებლივ ახორციელებს განცხადებას შედის 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 მაგალითი

ეს მარტივი მაგალითია იმისთვის, რომ ეს განცხადება გამოიყენოს მაგალითით. წარმოიდგინეთ, რომ თქვენ ხართ ადამიანური რესურსების მონაცემთა ბაზის ადმინისტრატორი, რომელიც შეიცავს "თანამშრომლებს", რომელიც შეიცავს ორგანიზაციის თითოეულ თანამშრომელს. ეს მაგიდა იყენებს ძირითად ნომერს, როგორც პირველადი გასაღები . თქვენ შეგიძლიათ სცადოთ გამოიყენოთ ქვემოთ მოყვანილი განაცხადი იმისათვის, რომ შეიყვანოთ ახალი თანამშრომელი თქვენს მონაცემთა ბაზაში:

INSERT INTO თანამშრომლები (id, first_name, last_name, გაფართოება) VALUES (12497, "მაიკ", "ჩაპლი", 4201)

ნორმალურ პირობებში, ეს განცხადება რიგით დაემატება თანამშრომლების მაგიდას. თუმცა, თუ ID12- ის ID1- ს თანამშრომელი უკვე არსებობს მონაცემთა ბაზაში, გრაფის ჩასმა გამოიწვევს ძირითად საკვანძო შეზღუდვას და გამოიწვევს შემდეგ შეცდომებს:

Msg 2627, დონე 14, სახელმწიფო 1, ხაზი 1 დაწყებითი გასაღები შეზღუდვა 'PK_employee_id'. ობიექტის "dbo.employees" - ში დუბლიკატის გასაღები ვერ ჩაწერეთ. განცხადება შეწყდა.

მიუხედავად იმისა, რომ ეს შეცდომა მოგაწვდით ინფორმაციას, პრობლემის გადასაჭრელად საჭიროა, მასში ორი საკითხია. პირველი, გაგზავნა cryptic. იგი მოიცავს შეცდომებს, ხაზების ნომრებს და სხვა ინფორმაციას გაუგებარი საშუალო მომხმარებლისთვის. მეორე, რაც უფრო მნიშვნელოვანია, ის იწვევს განცხადებას შეწყვიტოს და შეიძლება გამოიწვიოს განაცხადის ავარიის მიზეზი.

ალტერნატივა არის გასაიდუმლოებული განაცხადი TRY- ში ... CATCH- ის განცხადება, როგორც ქვემოთ მოყვანილი:

BEGINIT ERROR_MESSAGE (): შეცვალეთ კონფიგურაცია შეცდომა: '+ ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'თანამშრომელი ფოსტა', @ თანახმაა = 'hr@foo.com', @body = 'შეცდომა ახალი თანამშრომლის ჩანაწერის შექმნისას მოხდა.', @subject = 'თანამშრომელი ID დუბლირებას შეცდომა'; END CATCH

ამ მაგალითში, ნებისმიერი შეცდომები, რომლებიც მოხდება, იტყობინება როგორც მომხმარებლის მიერ შესრულებული ბრძანება და hr@foo.com ელექტრონული ფოსტის მისამართი. მომხმარებლისთვის ნაჩვენები შეცდომა ქვევით გამოჩნდება:

შეცდომა: პირველადი ძირითადი შეზღუდვის დარღვევა "PK_employee_id". ობიექტის "dbo.employees" - ში დუბლიკატის გასაღები ვერ ჩაწერეთ. ფოსტა რიგდება.

რაც მთავარია, განაცხადის შესრულება ჩვეულებრივ განაგრძობს, რაც საშუალებას მისცემს პროგრამისტს შეცდომას გაუმკლავდეს შეცდომა. გამოყენების TRY ... CATCH განაცხადი არის ელეგანტური გზა პროაქტიულად აღმოაჩინოს და გაუმკლავდეს შეცდომებს, რომ მოხდეს SQL Server მონაცემთა ბაზაში განაცხადების.

სწავლის მეტი

თუ გსურთ შეიტყოთ მეტი სტრუქტურირებული შეკითხვის ენაზე, წაიკითხოთ შესავალი SQL- ში .