دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
Class Library در سی شارپ
1404/01/10 -
دستور BREAK در پایگاه داده sql
1404/01/02 -
دستور CONTINUE در پایگاه داده SQL
1404/01/01 -
دستور WAITFOR در پایگاه داده SQL
1403/12/26 -
دستور GOTO در پایگاه داده SQL
1403/12/25 -
حلقه WHILE در پایگاه داده SQL
1403/12/24
دستور GOTO در پایگاه داده SQL

دستور GOTO در پایگاه داده SQL
دستور GOTO در SQL Server یک دستور کنترلی برای تغییر مسیر اجرای کد به یک بخش مشخص از اسکریپت است.
این دستور معمولاً همراه با یک برچسب (Label) استفاده میشود که نشاندهنده نقطهای از کد است که اجرای برنامه باید به آنجا منتقل شود.
استفاده از GOTO میتواند جریان کنترل برنامه را تغییر دهد، اما معمولاً به دلیل کاهش خوانایی و سخت شدن دیباگ کردن کد، توصیه نمیشود.
این دستور بیشتر در Stored Procedure یا Scriptهای T-SQL استفاده میشود و زمانی که بخواهیم از اجرای برخی دستورات صرفنظر کنیم یا اجرای برنامه را به یک قسمت خاص هدایت کنیم، کاربرد دارد.
با این حال، در بیشتر موارد بهتر است از ساختارهای کنترلی استاندارد مانند IF...ELSE یا WHILE به جای GOTO استفاده شود تا خوانایی و نگهداری کد سادهتر شود.
سینتکس دستور GOTO در SQL
در SQL Server، شما میتوانید از GOTO به همراه یک Label (برچسب) استفاده کنید. ساختار کلی آن به شکل زیر است:
GOTO Label_Name;
...
Label_Name:
-- دستورات SQL که در این برچسب اجرا خواهند شد.
در اینجا:
Label_Name یک نام مشخص برای برچسب است که باید قبل از استفاده از GOTO در همان اسکریپت تعریف شود.
وقتی SQL Server به دستور GOTO Label_Name میرسد، اجرای برنامه مستقیماً به برچسب تعریفشده پرش میکند.
مثالهای عملی از GOTO در SQL Server
مثال 1: استفاده ساده از GOTO
در این مثال، مقدار یک متغیر بررسی شده و در صورت وجود یک مقدار خاص، اجرای کد به برچسب مورد نظر پرش میکند.
DECLARE @Number INT = 10;
IF @Number = 10
GOTO MyLabel;
PRINT 'این متن چاپ نمیشود زیرا GOTO اجرا شده است';
MyLabel:
PRINT 'اجرای برنامه به اینجا منتقل شد';
نتیجه اجرای کد:
اجرای برنامه به اینجا منتقل شد
چون GOTO MyLabel اجرا شده است، دستور PRINT 'این متن چاپ نمیشود' هرگز اجرا نمیشود.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
همین حالا شروع کنید و به دنیای دادهها بپیوندید!
مثال 2: استفاده از GOTO در یک حلقه برای خروج
گاهی ممکن است نیاز باشد از یک حلقه بینهایت خارج شویم. در اینجا از GOTO برای شکستن حلقه استفاده میکنیم:
DECLARE @Counter INT = 1;
WHILE 1=1
BEGIN
PRINT 'Counter: ' + CAST(@Counter AS NVARCHAR(10));
SET @Counter = @Counter + 1;
IF @Counter > 5
GOTO ExitLoop;
END
ExitLoop:
PRINT 'حلقه متوقف شد';
نتیجه اجرا:
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5
حلقه متوقف شد
توضیح: وقتی مقدار @Counter بیشتر از 5 شود، دستور GOTO ExitLoop اجرا شده و اجرای برنامه به ExitLoop: منتقل میشود، که در نتیجه، حلقه متوقف میشود.
مثال 3: پرش بین چندین Label
در این مثال از چندین برچسب برای کنترل جریان اجرای برنامه استفاده میکنیم:
DECLARE @Value INT = 2;
IF @Value = 1
GOTO Label1;
ELSE IF @Value = 2
GOTO Label2;
ELSE
GOTO EndLabel;
Label1:
PRINT 'برچسب 1 اجرا شد';
GOTO EndLabel;
Label2:
PRINT 'برچسب 2 اجرا شد';
GOTO EndLabel;
EndLabel:
PRINT 'پایان برنامه';
نتیجه اجرا:
برچسب 2 اجرا شد
پایان برنامه
چون مقدار @Value برابر با 2 بود، اجرای برنامه به Label2: پرش کرد.
مزایا و معایب استفاده از GOTO
-
مزایا
-
سادهسازی منطق پیچیده
در شرایطی که کنترل جریان اجرای برنامه پیچیده است، GOTO میتواند راهحلی سریع باشد. -
خروج سریع از حلقهها
در مواردی که نیاز به خروج از یک حلقه تودرتو داریم، GOTO گزینهای مؤثر است. -
بهبود خوانایی در شرایط خاص
گاهی استفاده صحیح از GOTO میتواند باعث کاهش تعداد دستورات شرطی تو در تو (IF...ELSE) شود.
-
-
معایب
-
کدهای غیرقابل خواندن و نگهداری
استفاده زیاد از GOTO میتواند منجر به Spaghetti Code شود که درک آن را دشوار میکند. -
عدم سازگاری در برخی DBMSها
برخی از سیستمهای پایگاه داده مانند MySQL و PostgreSQL از GOTO پشتیبانی نمیکنند. -
افزایش احتمال خطا
در صورتی که برچسبها به درستی مدیریت نشوند، برنامه ممکن است به صورت غیرمنتظره اجرا شود.
-
جایگزینهای GOTO در SQL
به جای استفاده از GOTO، میتوان از روشهای زیر برای کنترل جریان اجرای برنامه استفاده کرد:
-
استفاده از CASE WHEN
DECLARE @Value INT = 2;
SELECT
CASE
WHEN @Value = 1 THEN 'برچسب 1 اجرا شد'
WHEN @Value = 2 THEN 'برچسب 2 اجرا شد'
ELSE 'پایان برنامه'
END AS Result;
-
استفاده از BREAK در حلقهها
DECLARE @Counter INT = 1;
WHILE @Counter <= 5
BEGIN
PRINT 'Counter: ' + CAST(@Counter AS NVARCHAR(10));
SET @Counter = @Counter + 1;
IF @Counter > 5
BREAK;
END
PRINT 'حلقه متوقف شد';
این روش جایگزین GOTO در حلقهها است.
مثال پروژه محور از دستور GOTO در SQL
فرض کنید یک سیستم بانکی داریم که باید قبل از انجام تراکنش، بررسی کند آیا کاربر موجودی کافی دارد یا نه.
اگر موجودی کافی نباشد، اجرای کد باید به یک پیام خطا هدایت شود.
مثال پروژهمحور
DECLARE @Balance INT = 500 -- موجودی حساب
DECLARE @WithdrawAmount INT = 700 -- مقدار برداشت
IF @WithdrawAmount > @Balance
GOTO InsufficientFunds -- انتقال به پیام خطا
-- انجام تراکنش در صورت کافی بودن موجودی
SET @Balance = @Balance - @WithdrawAmount
PRINT 'تراکنش با موفقیت انجام شد!'
RETURN
InsufficientFunds:
PRINT 'خطا: موجودی حساب کافی نیست!'
توضیح پروژه
- ابتدا موجودی حساب و مقدار برداشت بررسی میشود.
- اگر مبلغ برداشت بیشتر از موجودی باشد، اجرای کد مستقیماً به InsufficientFunds منتقل میشود و پیام خطا نمایش داده میشود.
- در غیر این صورت، تراکنش انجام شده و موجودی بروزرسانی میشود.
- استفاده از GOTO در اینجا کمک میکند که در صورت عدم موجودی کافی، بدون اجرای کدهای اضافه، به پیام خطا منتقل شویم.
دوره های مرتبط

آموزش پایگاه داده SqlServer
پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .