ورود

View Full Version : Exception Handling در SQLServer



m-khorsandi
چهارشنبه 01 تیر 1384, 11:45 صبح
درود

آیا در SQL Serve امکان این هست که در زمان اجرای دستوراتی اگر خطایی اتفاق
افتاد آن را کنترل کرد؟ برای مثال یه حلقه رو در نظر بگیرید که در زمان اجرا یکی از
دستوراتی که داخل حلقه اجرا میشه با خطایی متوقف بشه، آیا امکان این هست
که بقیه حلقه رو اجرا کرد؟

سپاس.

AminSobati
چهارشنبه 01 تیر 1384, 20:00 عصر
در SQL Server 2000 خیر، نمیشه خطایی که رخ داده رو ازش صرف نظر کنین، یعنی کنترل به کلاینت برمیگرده. ولی در SQL Server 2005 دقیقا دستور Try...Catch وجود داره.
موفق باشید

m-khorsandi
یک شنبه 05 تیر 1384, 07:44 صبح
ممنون.

m-khorsandi
سه شنبه 07 تیر 1384, 08:01 صبح
آقای ثباتی عزیز،
من با استفاده از یک حلقه (از Cursor استفاده کردم)، مقدار یکی از فیلدها رو میخونم، که این
مقدار اسم یک LinkedServer هست و بعد با استفاده از OpenQuery و یک Execute (دستورات Execute به
صورت داینامیک تنظیم میشن) یک رکورد خاص رو داخل یه جدول که مربوط به اون LinkedServer خاص میشه
قرار میدم. حالا میخوام بپرسم اگه ارتباط من که توسط لینک سرور مشخص میشه برقرار نباشه باعث میشه
که حلقه کامل اجرا نشه و در اصل خطایی اتفاق بیفته؟
من میخوام کاری کنم که اگه فرضا از تعداد 10 تا لینک سرور ارتباط 3 تا از انها با من قطع بود بتونم کارهای مورد
نظرم رو روی 7 دیگه انجام بدم.

باز هم از راهنمائیتون متشکرم.

AminSobati
سه شنبه 07 تیر 1384, 11:03 صبح
زمانیکه که یک Linked Server در دسترس نباشه معمولا ERROR@@ مقدار 17 رو برمیگردونه. شما بعد از رجوع به Linked Server میتونین ERROR@@ رو چک کنین تا متوجه بشین که آیا کار با موفقیت انجام شده یا نه.
امیدوارم نیاز شما رو درست متوجه شده باشم..

m-khorsandi
سه شنبه 07 تیر 1384, 11:29 صبح
آیا امکان این هست که چک کنم Linked Server در دسترس هست یا نه و بعد ازش استفاده کنم؟

ممنون.

AminSobati
سه شنبه 07 تیر 1384, 14:02 عصر
در حال حاضر نه، ولی میتونین به بهانه SELECT از یک جدول کوچک، ارتباط رو تست کنین. ولی در SQL Server 2005 چیزی مثل این وجود خواهد داشت:

declare @srvr nvarchar(128), @retval int;
set @srvr = 'my_linked_srvr';
begin try
exec @retval = sys.sp_testlinkedserver @srvr;
end try
begin catch
set @retval = sign(@@error);
end catch;
if @retval <> 0
raiserror('Unable to connect to server. This operation will be tried later!', 16, 2 );

m-khorsandi
چهارشنبه 08 تیر 1384, 12:24 عصر
از توضیحاتتون ممنونم.