مشاركة عبر


استخدام حلقات T-SQL لتجمعات SQL المخصصة في Azure Synapse Analytics

تتضمن هذه المقالة نصائح لتطوير حلول تجمع SQL المخصصة باستخدام حلقات T-SQL واستبدال المؤشرات.

الغرض من حلقات WHILE

تدعم تجمعات SQL المخصصة في Azure Synapse حلقة WHILE لتنفيذ كتل العبارة بشكل متكرر. تستمر حلقة WHILE هذه طالما أن الشروط المحددة صحيحة أو لحين قيام التعليمات البرمجية بإنهاء الحلقة بشكل خاص باستخدام الكلمة الأساسية BREAK.

الحلقات مفيدة لاستبدال المؤشرات المحددة في التعليمات البرمجية SQL. لحسن الحظ، تنتمي جميع المؤشرات المكتوبة في التعليمات البرمجية SQL إلى مجموعة متنوعة سريعة للقراءة فقط. لذلك، تعد حلقات WHILE بديلا رائعا لاستبدال المؤشرات.

استبدال المؤشرات في تجمع SQL المخصص

ومع ذلك، يجب أن تسأل نفسك السؤال التالي: "هل يمكن إعادة كتابة هذا المؤشر لاستخدام العمليات المستندة إلى المجموعة؟"

في كثير من الحالات، تكون الإجابة نعم وغالبا تكون هي النهج الأفضل. غالبا ما تنفذ العملية المستندة إلى المجموعة بشكل أسرع من نهج تكراري مكون من صف تلو الآخر.

يمكن استبدال مؤشرات القراءة فقط السريعة للأمام بسهولة ببنية تكرار حلقي. المثال التالي هو مثال بسيط. مثال التعليمة البرمجية هذه يقوم بتحديث الإحصائيات لكل جدول في قاعدة البيانات. بالتكرار عبر الجداول في التكرار الحلقي، يتم تنفيذ كل أمر بالتسلسل.

أولا، قم بإنشاء جدول مؤقت يحتوي على رقم صف فريد يستخدم لتعريف العبارات الفردية:

CREATE TABLE #tbl
WITH
( DISTRIBUTION = ROUND_ROBIN
)
AS
SELECT  ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Sequence
,       [name]
,       'UPDATE STATISTICS '+QUOTENAME([name]) AS sql_code
FROM    sys.tables
;

ثانيا، تهيئة المتغيرات المطلوبة لتنفيذ الحلقة:

DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
,       @i INT = 1
;

الآن تكرر العبارات التي تنفذها واحدة تلو الأخرى:

WHILE   @i <= @nbr_statements
BEGIN
    DECLARE @sql_code NVARCHAR(4000) = (SELECT sql_code FROM #tbl WHERE Sequence = @i);
    EXEC    sp_executesql @sql_code;
    SET     @i +=1;
END

أخيرًا قم بقطع الجدول المؤقت الذي تم إنشاؤه في الخطوة الأولى

DROP TABLE #tbl;

الخطوات التالية

لمزيد من نصائح التطوير، راجع نظرة عامة على التطوير.