በ TRY ... መጠቀምን የሚወስድ ደረጃ-በደረጃ መመሪያ የ SQL Server ስህተቶችን ለመቆጣጠር መፈለግ

ፍርዱን ሳያቋርጥ ስህተቶችን ለይ

የ TRY ... CATCH መግለጫ በ Transact- SQL ውስጥ በመፈለግ እና በመረጃ ቋቶች ውስጥ ያሉ የስህተት እክሎችን ይከታተላል. ይህ መግለጫ የ SQL Server የአስማት ማጠናከሪያ የማዕዘን ድንጋይ ሲሆን ጠንካራ የሆኑ የውሂብ ጎታ አፕሊኬሽኖችን ለመገንባት ወሳኝ አካል ነው. TRY ... CATCH ከ 2008 ጀምሮ የ Azure SQL Database, የ Azure SQL Data Warehouse እና የፓንዴል የውሂብ ማከማቻ መጋዘን.

TRY..CATCH ን በማስተዋወቅ ላይ

TRY ... CATCH ሁለት የትራክ-SQL አረፍተ-ነገሮችን እንድትገልጹ በመፍቀድ ይሰራሉ-ሊከሰቱ የሚችሉ ስህተቶችን "ለማጥናት" የሚፈልጉትን ሌላ ሰው እንዲሞክሩ ይፈልጋሉ. SQL Server ከ TRY ... CATCH ዓረፍተ ሐሳብ ጋር ሲገናኝ, TRY ውስጥ የተካተተውን ዓረፍተ ነገር ወዲያውኑ ያከናውናል. የ TRY መግለጫ በተሳካ ሁኔታ ከተፈጸመ, SQL Server በቀላሉ ይቀጥላል. ሆኖም ግን, TRY መግለጫ ስህተትን ሲያመጣ, SQL አርም የ CATCH ዓረፍተ ነገር ስህተቱን እንዲያስተካክለው ያንቀሳቅሳል.

መሠረታዊው አገባብ ይሄን ቅጽ ይወስዳል:

BEGIN ይሂዱ {sql_statement | statement_block} አይቁረጡ [{sql_statement |} statement_block}] END CATCH [; ]

ሙከራ ... ምሳሌ ስለ ምሳሌ

አንድ ምሳሌ በመጠቀም ይህንን መግለጫ አጠቃቀም ለመረዳት በጣም ቀላል ነው. በድርጅትዎ ውስጥ ስላሉት እያንዳንዱ ሰራተኞች መረጃን የያዘ "ሠራተኞች" የሚል ሠንጠረዥ የያዘውን ሠንጠረዥ የያዘ "የሰራተኞች" የሰፈረ የሰዎች ሀብቶች ውሂብ አስተዳዳሪ መሆንዎን ገምቱ. ያ ሰንጠረዥ የመደበኛ ሠራተኛ ቁጥር መታወቂያ ቁጥር ዋና ቁልፍ አድርጎ ይጠቀማል. አዲስ ሰራተኛ ወደ "የውሂብ ጎታዎ" ለመግባት ከታች ያለውን መግለጫ ለመጠቀም ይሞክሩ:

INSERT INTO ሰራተኞች (መታወቂያ, የመጀመሪያ ስም, የመጨረሻ ስም, ቅጥያ) VALUES (12497, «Mike», «Chapple», 4201)

በተለመደው ሁኔታ ውስጥ, ይህ መግለጫ ወደ ሠራተኛ ሠንጠረዡ ረድፍ ያክላል. ሆኖም ግን የመታወቂያ ቁጥር 12497 ያለው ሠራተኛ በመረጃ መዝጊያ ውስጥ ቀደም ሲል ከተቀመጠ ቀዳዳውን ማስገባት ዋናው የቁልፍ ገደብን ይጥሳል.

Msg 2627, Level 14, State 1, Line 1 የ PRIMARY KEY መገደብ 'PK_employee_id' ጥሰት. በነገቢው «dbo.employees» ውስጥ የተባዛ ቁልፍን ማስገባት አይቻልም. መግለጫው ተቋርጧል.

ይህ ስህተት ችግሩን መላ ለመፈለግ የሚያስፈልጉትን መረጃዎችን ቢሰጥዎም, ሁለት ችግሮች አሉበት. አንደኛ, መልእክቱ ምስጢራዊ ነው. የስህተት ኮዶች, የመስመሮች ቁጥር እና ለአማካይ ተጠቃሚ የማይታወቅ መረጃን ያካትታል. ሁለተኛ, እና ከሁሉም በላይ ደግሞ ዓረፍተ ነገሩ ውርጃ እንዲፈርስ እና አንድ መተግበሪያን እንዲሰናከል ሊያደርግ ይችላል.

አማራጭ ማለት ዓረፍተ ምልክቱን በ TRY ... CATCH መግለጫ ውስጥ ለማጠቃለል, ከዚህ በታች እንደሚታየው:

BEGIN ወደ ሰራተኞች ይግቡ (መታወቂያ, የመጀመሪያ ስም, የመጨረሻ ስም, ቅጥያ) VALUES (12497, «Mike», «Chapple», 4201) END Try BEGIN MISSING PRINT 'Error:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'የተቀጣሪ ደብዳቤ', @recipients = 'hr@foo.com', @body = 'አዲስ የሰራተኛ መዝገብ በመፍጠር ላይ ስህተት ተከስቷል.', @subject = 'Employee ID Duplication Error'; አስቂኝ

በዚህ ምሳሌ ውስጥ ማንኛውም ስህተቶች ለተጠቃሚው ትዕዛዙን እና ለ hr@foo.com ኢ-ሜል አድራሻ ሪፖርት ተደርገዋል. ለ ተጠቃሚ የሚታየው ስህተት ከታች ይታያል

ስህተት: የ PRIMARY KEY ገደብን «PK_employee_id» ጥሰት. በነገቢው «dbo.employees» ውስጥ የተባዛ ቁልፍን ማስገባት አይቻልም. ደብዳቤ ወረፋ ይዟል.

ከሁሉም በላይ, የትግበራ አፈፃፀም በተለምዶ ይቀጥላል, ይህም የፕሮግራም አድራጊውን በደመቁ ሁኔታ እንዲይዝ ያስችለዋል. የ TRY ን አጠቃቀም ... CATCH መግለጫ በ SQL በአቅራቢዎች የውሂብ ጎታ ላይ የተከሰቱ ስህተቶችን በንቃት ለመከታተል እና ለማስተናገድ ውብ መንገድ ነው.

ተጨማሪ መማር

ስለ የተዋቀረው የቋንቋ ቋንቋ ተጨማሪ ለማወቅ ከፈለጉ ለ SQL መግቢያ ያንብቡ.