دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
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
دستور BREAK در پایگاه داده sql

مفهوم دستور BREAK در SQL
معمولاً در سیستمهای SQL Server Reporting Services (SSRS) برای ایجاد شکست یا جداسازی در گزارشها استفاده میشود.
به عبارت دیگر، زمانی که شما شرایط خاصی را برآورده کنید و بخواهید از حلقه خارج شوید، از BREAK استفاده میکنید.
دستور BREAK در حلقههای WHILE در SQL Server
در T-SQL (Transact-SQL)، دستور BREAK برای خروج از یک حلقه WHILE استفاده میشود. زمانی که BREAK اجرا شود، حلقه متوقف شده و پردازش بعد از حلقه ادامه مییابد.
1.۱. ساختار کلی دستور BREAK
WHILE (شرط)
BEGIN
-- دستورات موردنظر
IF (شرط خروج)
BREAK; -- خروج از حلقه
-- ادامه اجرای دستورات
END
۱.۲. مثال از BREAK در یک حلقه WHILE
در این مثال، یک حلقه WHILE مقدار یک متغیر را از ۱ تا ۱۰ افزایش میدهد و هنگام رسیدن به مقدار ۵، با استفاده از BREAK از حلقه خارج میشود.
DECLARE @counter INT = 1;
WHILE (@counter <= 10)
BEGIN
PRINT 'مقدار شمارنده: ' + CAST(@counter AS VARCHAR);
-- اگر شمارنده به ۵ رسید، از حلقه خارج شو
IF @counter = 5
BREAK;
SET @counter = @counter + 1;
END;
PRINT 'حلقه پایان یافت!';
۱.۳. خروجی مثال بالا
مقدار شمارنده: 1
مقدار شمارنده: 2
مقدار شمارنده: 3
مقدار شمارنده: 4
مقدار شمارنده: 5
حلقه پایان یافت!
همانطور که میبینید، وقتی مقدار شمارنده به ۵ میرسد، دستور BREAK اجرا شده و حلقه متوقف میشود.
۲. استفاده از BREAK در پردازشهای کنترل جریان
در برخی موارد، ممکن است نیاز داشته باشیم اجرای یک عملیات طولانی را بر اساس یک شرط خاص متوقف کنیم.
۲.۱. مثال: متوقف کردن یک عملیات درون WHILE
DECLARE @value INT = 1;
WHILE (1 = 1) -- یک حلقه بینهایت
BEGIN
PRINT 'در حال پردازش... مقدار: ' + CAST(@value AS VARCHAR);
-- شرط توقف پردازش
IF @value = 10
BREAK;
SET @value = @value + 1;
END;
PRINT 'عملیات متوقف شد!';
۲.۲. تحلیل کد
این حلقه تا زمانی که مقدار متغیر @value به ۱۰ نرسد، اجرا میشود.
وقتی مقدار آن به ۱۰ رسید، BREAK اجرا شده و عملیات متوقف میشود.
۳. جایگزین BREAK در CASE و IF
گاهی به جای BREAK، میتوان از شرطهای IF یا CASE برای کنترل جریان استفاده کرد.
۳.۱. استفاده از CASE برای متوقف کردن پردازش
SELECT
OrderID,
CustomerID,
CASE
WHEN TotalAmount > 1000 THEN 'VIP Customer'
ELSE 'Regular Customer'
END AS CustomerType
FROM Orders;
در این مثال، مقدار CustomerType بسته به مقدار TotalAmount تغییر میکند، اما نیازی به استفاده از BREAK نیست، زیرا CASE خود به خود اجرا را متوقف میکند.
۴. استفاده از BREAK در گزارشات SSRS
در SQL Server Reporting Services (SSRS)، از BREAK برای تقسیم بخشهای مختلف گزارش استفاده میشود.
۴.۱. ایجاد BREAK در گروهبندیهای گزارش
۱. در SSRS Report Builder، روی جدول کلیک کنید. 2. به Group Properties بروید. 3. گزینه Page Breaks را انتخاب کنید. 4. تیک گزینه Between each instance of a group را فعال کنید.
پروژه: مدیریت پردازش سفارشات با استفاده از BREAK در SQL Server
فرض کنید یک فروشگاه آنلاین داریم که میخواهیم پردازش سفارشات را انجام دهیم، اما اگر تعداد سفارشهای پردازششده به ۵۰ برسد، پردازش را متوقف کنیم تا سرور بیش از حد بارگذاری نشود.
۱. ایجاد جدول سفارشات (Orders)
ابتدا جدول سفارشات را ایجاد میکنیم.
CREATE TABLE Orders (
OrderID INT IDENTITY(1,1) PRIMARY KEY,
CustomerName VARCHAR(100),
OrderStatus VARCHAR(20) DEFAULT 'Pending'
);
۲. وارد کردن دادههای نمونه
INSERT INTO Orders (CustomerName, OrderStatus)
SELECT TOP 100 'مشتری ' + CAST(ROW_NUMBER() OVER (ORDER BY NEWID()) AS VARCHAR), 'Pending'
FROM sys.objects;
این دستور ۱۰۰ سفارش ایجاد میکند که وضعیت آنها "Pending" است.
۳. پردازش سفارشات با BREAK
اکنون میخواهیم حداکثر ۵۰ سفارش را پردازش کنیم و سپس متوقف شویم.
DECLARE @ProcessedCount INT = 0;
DECLARE @OrderID INT;
DECLARE OrderCursor CURSOR FOR
SELECT OrderID FROM Orders WHERE OrderStatus = 'Pending';
OPEN OrderCursor;
FETCH NEXT FROM OrderCursor INTO @OrderID;
WHILE @@FETCH_STATUS = 0
BEGIN
-- پردازش سفارش (تغییر وضعیت به 'Processed')
UPDATE Orders SET OrderStatus = 'Processed' WHERE OrderID = @OrderID;
-- افزایش شمارنده پردازششدهها
SET @ProcessedCount = @ProcessedCount + 1;
-- اگر تعداد پردازششدهها به ۵۰ رسید، متوقف شو
IF @ProcessedCount = 50
BREAK;
FETCH NEXT FROM OrderCursor INTO @OrderID;
END;
CLOSE OrderCursor;
DEALLOCATE OrderCursor;
PRINT 'پردازش ۵۰ سفارش انجام شد!';
۴. بررسی نتایج
SELECT OrderStatus, COUNT(*) AS Count FROM Orders GROUP BY OrderStatus;
خروجی نشان میدهد که ۵۰ سفارش پردازش شدهاند و باقی سفارشها همچنان "Pending" هستند.
نتیجهگیری:
در این پروژه، از BREAK برای محدود کردن پردازش سفارشات استفاده کردیم تا از بارگذاری بیش از حد سرور جلوگیری کنیم.