এসকিউএল সার্ভারে ব্যাচ বিলোপ ত্রুটির তালিকা


9

এসকিউএল সার্ভারে, যদি XACT_ABORT বন্ধ থাকে তবে কিছু ত্রুটি বর্তমান বিবৃতিটি সমাপ্ত করে দেবে (উদাহরণস্বরূপ কোনও সঞ্চিত পদ্ধতিতে ভুল সংখ্যক প্যারামিটার সরবরাহ করা হয় যা কিছু পরামিতি নেয়) এবং কিছু ত্রুটি পুরো ব্যাচটি বাতিল করে দেয় (উদাহরণস্বরূপ কোনও স্টোরেজে প্যারামিটার সরবরাহ করা হয়) পদ্ধতি যা পরামিতি নেয় না)। [রেফারেন্স]: http://www.sommarskog.se/error-handling-I.html#scope-abortion

আমি যা জানতে চাই তা হ'ল কোন ত্রুটি ব্যাচটি বাতিল করা এবং কোনটি বিবৃতিটি সমাপ্ত হচ্ছে তার একটি নির্দিষ্ট তালিকা রয়েছে কিনা।

উত্তর:


6

আমি বিশ্বাস করি যে কয়েকটি ব্যতিক্রম আছে তবে ডেটাবেস ইঞ্জিন ত্রুটি তীব্রতা (এমএসডিএন) থেকে :

19 বা ততোধিকের তীব্রতার স্তরের ত্রুটি বার্তাগুলি বর্তমান ব্যাচের কার্যকারিতা বন্ধ করে।

ত্রুটিগুলি যেগুলি ডেটাবেস সংযোগটি শেষ করে, সাধারণত 20 থেকে 25 এর মধ্যে তীব্রতার সাথে, ক্যাচ ব্লক দ্বারা পরিচালিত হয় না কারণ সংযোগটি শেষ হলে মৃত্যুদন্ড কার্যকর করা হয়।

সুতরাং দেখে মনে হচ্ছে আপনি নিম্নলিখিত কোয়েরি থেকে একটি সুনির্দিষ্ট তালিকা পেতে পারেন (অবশ্যই এটি আপনাকে টি-এসকিউএল এর ফলে কোনটি তৈরি করতে পারে তা ফিল্টার করতে দেয় না):

SELECT message_id, severity, [text]
FROM sys.messages
WHERE language_id = 1033 
AND severity >= 19
ORDER BY severity, message_id;

এসকিউএল সার্ভারে 2012, এটি 210 সারি তৈরি করে produces

এসকিউএল সার্ভার 2016 এ এটি 256 টি সারি তৈরি করে।

যাইহোক, আপনার প্রশ্নে আপনি যে দুটি পরিস্থিতিতে বর্ণনা করেছেন তাতে আপনি যেভাবে ভাবছেন ঠিক সেভাবেই বিশ্বাস করি না, কমপক্ষে এসকিউএল সার্ভারের আধুনিক সংস্করণগুলিতে নয়। আমি 2012 এবং 2016 উভয় ক্ষেত্রেই এটি চেষ্টা করেছি (আমি বিশ্বাস করি এরল্যান্ডের নিবন্ধটি এসকিউএল সার্ভার 2000 আচরণের বর্ণনা দেয়, যা আমি মনে করি না এটি অন্যরকম ছিল কিনা, তবে আজও খুব প্রাসঙ্গিক নয়)।

USE tempdb;
GO

CREATE PROCEDURE dbo.pA -- no parameters
AS PRINT 1
GO
CREATE PROCEDURE dbo.pB -- two parameters
@x INT, @y INT
AS PRINT 1
GO

SET XACT_ABORT OFF;
GO

EXEC dbo.pA @foo = 1; 
PRINT '### Calling procedure that doesn''t take parameters with a parameter';
GO

EXEC dbo.pB; 
PRINT '### Calling procedure that takes 2 parameters with no parameters';
GO

EXEC dbo.pB @x = 1; 
PRINT '### Calling procedure that takes 2 parameters with not enough parameters';
GO

EXEC dbo.pB @x = 1, @y = 2, @z = 3; 
PRINT '### Calling procedure that takes 2 parameters with too many parameters';
GO

এই সমস্ত তীব্রতা স্তরের 16 এর ত্রুটি তৈরি করে এবং এগুলির সমস্ত ব্যাচটি নিয়ে প্রিন্ট আউটপুট দ্বারা প্রমাণিত হয়:

এমএসজি 8146, স্তর 16, রাজ্য 2, প্রক্রিয়া পিএ, লাইন 11
পদ্ধতি পিএর কোনও পরামিতি নেই এবং যুক্তি সরবরাহ করা হয়নি।
### কলিং পদ্ধতি যা
এমএসজি 201, স্তরের 16, রাজ্য 4, প্রক্রিয়া পিবি, লাইন 14
পদ্ধতি বা ফাংশন 'পিবি' প্যারামিটার '@ x' আশা করে, যা সরবরাহ করা হয়নি with
### কলিং পদ্ধতি যা
এমএসজি 201, স্তর 16, রাজ্য 4, পদ্ধতি পিবি, লাইন 18
পদ্ধতি বা ফাংশন 'পিবি' সরবরাহ করে না এমন প্যারামিটার প্রত্যাশা করে 2 পরামিতি নেয়।
### কলিং পদ্ধতি যা পর্যাপ্ত
পরিমানের এমএসজি 8144, স্তর 16, রাজ্য 2, প্রক্রিয়া পিবি, লাইন 22
পদ্ধতি বা ফাংশন পিবি সহ 2 পরামিতি নেয় খুব বেশি যুক্তি নির্দিষ্ট করা আছে।
### কলিংয়ের পদ্ধতি যা অনেক বেশি পরামিতি সহ 2 টি পরামিতি নেয়

আমি সন্দেহ হিসাবে, অবশ্যই ব্যতিক্রম আছে, মন্তব্য হিসাবে উল্লিখিত। রূপান্তর ব্যর্থতা তীব্রতা 16 কিন্তু ব্যাচটি বাতিল করে:

SET XACT_ABORT OFF;
SELECT CONVERT (INT, 'foo');
PRINT 'Made it.'; -- no print happens

ফলাফলগুলি মুদ্রণ আউটপুট এই সময় অন্তর্ভুক্ত নয়:

এমএসজি 245, স্তর 16, রাজ্য 1
রূপান্তরটি ব্যর্থ হয়েছে যখন বর্ণের মান 'foo' কে ডেটা টাইপ ইনটে রূপান্তরিত করে।


আপনাকে অনেক ধন্যবাদ! আমি ভেবেছিলাম পূর্বের অসঙ্গতির কারণে আমি তীব্রতা স্তরটিকে সূচক হিসাবে ব্যবহার করতে পারব না। শুনে খুব খুশি যে ঘটনাটি নয়।
জেমি অ্যালফোর্ড

Aargh! এখনও কিছু তীব্রতা স্তরের 16 ত্রুটি রয়েছে যা ব্যাচটি বাতিল করে দেবে। যদি আমি সিলেক্ট করে এক্সিকিউট করি: আর্ট প্রিন্ট করুন আরআর্ট্রি ট্রান্ট প্রিন্ট কনভার্ট (int, 'abc') এর পরে: মুদ্রণ @@ ট্রান্ট একটি স্তরের 16 ত্রুটি থাকবে তবে ব্যাচটি বাতিল করা হবে।
জেমি আলফোর্ড

বিটিডাব্লু, আপনি যদি ঘোষিত ব্যক্তির থেকে আলাদা তীব্রতার সাথে ব্যতিক্রম উত্থাপিত মামলাগুলি আবিষ্কার করেন তবে দয়া করে সংযোগের মাধ্যমে তাদের রিপোর্ট করুন
রিমাস রুসানু

2

ত্রুটি ধরনের ছাড়াও @Aaron দ্বারা লক্ষনীয় (অর্থাত তীব্রতা> = 19 এবং রূপান্তর ব্যর্থতা), ত্রুটি নিম্নলিখিত প্রকারের জন্য দুটিই MSDN পৃষ্ঠা উল্লেখ করার চেষ্টা করুন ... ধরা , will একটি ব্যাচ পরিত্যাগ:

নিম্নলিখিত ধরণের ত্রুটিগুলি ক্যাচ ব্লক দ্বারা পরিচালিত হয় না যখন এগুলি ট্রাই ... ক্যাচ কনস্ট্রাক্টের মতো একই স্তরের কার্যকর হওয়ার সময় ঘটে;

  • সংশ্লেষ ত্রুটিগুলির মতো সংকলন ত্রুটিগুলি, যা কোনও ব্যাচকে চলমান থেকে বাধা দেয়।

  • বিবৃতি-স্তরের পুনঃসংশোধনের সময় ঘটে যাওয়া ত্রুটিগুলি, যেমন স্থগিত নাম রেজোলিউশনের কারণে সংকলনের পরে ঘটে যাওয়া বস্তুর নাম রেজোলিউশন ত্রুটি।

এই ত্রুটিগুলি সেই স্তরে ফিরে আসে যা ব্যাচটি চালিত করে, সঞ্চিত প্রক্রিয়া করে বা ট্রিগার করে।

নীচের উদাহরণগুলিতে দয়া করে নোট করুন যে এর মধ্যে তিনটি এমনকি তীব্রতা স্তর 15।

উদাহরণ 1

SET XACT_ABORT OFF;
SELECT @NotDeclared; -- parse error
PRINT 'Do you see me?';

রিটার্নস:

এমএসজি 137, স্তর 15, রাজ্য 2, লাইন 2
অবশ্যই স্কেলার ভেরিয়েবল "@NotDeclared" ঘোষণা করতে হবে।

উদাহরণ 2

SET XACT_ABORT OFF;
InvalidSQL; -- parse error
PRINT 'Do you see me?';

রিটার্নস:

এমএসজি 102, স্তর 15, রাজ্য 1, লাইন 2
'অবৈধ এসকিউএল' এর নিকটে ভুল সিনট্যাক্স।

উদাহরণ 3

SET XACT_ABORT OFF;
SELECT 1 -- statement preceding THROW not terminated by semicolon
THROW 50505, N'Error, yo', 1; -- parse error
PRINT 'Do you see me?';

রিটার্নস:

এমএসজি 102, স্তর 15, রাজ্য 1, লাইন 3
'50505 'এর নিকটে ভুল সিনট্যাক্স।

উদাহরণ 4

SET XACT_ABORT OFF;
SELECT NoSuchColumn FROM sys.objects; -- compilation error
PRINT 'Do you see me?';

রিটার্নস:

Msg 207, স্তর 16, রাজ্য 1, লাইন 3
অবৈধ কলামের নাম 'NoSuch Column'।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.