আমি লিঙ্কযুক্ত সার্ভারগুলির একটি তালিকার মধ্য দিয়ে লুপ করার জন্য একটি চাকরী স্থাপন করছি এবং প্রত্যেকটির বিরুদ্ধে একটি নির্দিষ্ট কোয়েরি সম্পাদন করছি। আমি চেষ্টাটি ট্রাই-ক্যাচ ব্লকের ভিতরে সম্পাদন করার চেষ্টা করছি তাই যদি একটি নির্দিষ্ট সার্ভারে কোনও সমস্যা হয় তবে আমি এটি লগ করতে পারি তবে অন্য সার্ভারগুলির সাথে চালিয়ে যেতে পারি।
লুপের ভিতরে আমি যে ক্যোয়ারীটি সম্পাদন করছি তা দেখতে কিছুটা এমন দেখাচ্ছে:
BEGIN TRY
SELECT *
FROM OPENQUERY([server1], 'SELECT 1 AS c;');
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER(), ERROR_MESSAGE();
END CATCH;
PRINT 'We got past the Catch block!';
সার্ভারের সাথে সংযোগ স্থাপনে যদি সমস্যা হয় তবে কোডটি তাত্ক্ষণিকভাবে ব্যর্থ হয় এবং CATCH
ব্লকে স্থানান্তর করে না । যদি সার্ভারটি সংযুক্ত হয় তবে প্রকৃত ক্যোয়ারীতে একটি ত্রুটি রয়েছে, উদাহরণস্বরূপ শূন্য দ্বারা ভাগ করা, তবে এটি CATCH
ব্লকের দ্বারা প্রত্যাশা অনুযায়ী ধরা পড়ে ।
উদাহরণস্বরূপ, আমি একটি নামের সাথে একটি লিঙ্কযুক্ত সার্ভার তৈরি করেছি যা আমি জানি যে বিদ্যমান নেই। উপরের এক্সিকিউট করার সময় আমি কেবল এটি পাই:
OLE DB provider "SQLNCLI" for linked server "nonserver" returned message
"Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "nonserver" returned message
"An error has occurred while establishing a connection to the server.
When connecting to SQL Server 2005, this failure may be caused by the
fact that under the default settings SQL Server does not allow remote
connections.".
Msg 53, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [53].
আমি বিওএলটি পড়েছি TRY-CATCH
এবং জানি যে এটি সংযোগটি ভেঙে 20+ স্তরের ত্রুটি ধরবে না তবে এটি কেস হিসাবে মনে হচ্ছে না (এটি কেবলমাত্র 16 স্তরের)।
এই ত্রুটিগুলি সঠিকভাবে ধরা পড়ছে না এমন কি কেউ জানেন?