استخدام كتل IF وWHILE للتحكم في تدفق البرنامج
تتضمن جميع لغات البرمجة العناصر التي تساعدك على تحديد تدفق البرنامج، أو الترتيب الذي يتم به تنفيذ العبارات. على الرغم من أن T-SQL لا تتميز بشكل كامل مثل لغات مثل C#، فإن T-SQL يوفر مجموعة من الكلمات الأساسية للتحكم في التدفق التي يمكنك استخدامها لإجراء اختبارات منطقية وإنشاء حلقات تحتوي على عبارات معالجة بيانات T-SQL. في هذا الدرس، ستتعلم كيفية استخدام الكلمات الأساسية T-SQL IF و WHILE.
فهم التحكم T-SQL في لغة التدفق
يوفر SQL Server عناصر اللغة التي تتحكم في تدفق تنفيذ البرنامج داخل دفعات T-SQL والإجراءات المخزنة والوظائف متعددة الكلمات المعرفة من قبل المستخدم. تعني عناصر التحكم في التدفق هذه أنه يمكنك تحديد ما إذا كنت تريد تنفيذ عبارات برمجيا وتحديد ترتيب تلك العبارات التي يجب تنفيذها برمجيا.
تتضمن هذه العناصر، على سبيل المثال لا الحصر:
- لو... ELSE، الذي ينفذ التعليمات البرمجية استنادا إلى تعبير منطقي.
- بينما، الذي ينشئ تكرار حلقي ينفذ توفير شرط صحيح.
- بدأ... END، الذي يحدد سلسلة من عبارات T-SQL التي يجب تنفيذها معا.
- الكلمات الأساسية الأخرى، على سبيل المثال، BREAK و CONTINUE و WAITFOR و RETURN، والتي تستخدم لدعم عمليات التحكم في التدفق T-SQL.
فيما يلي مثال على عبارة IF:
IF OBJECT_ID('dbo.tl') IS NOT NULL
DROP TABLE dbo.tl
GO
استخدم المنطق الشرطي في برامجك باستخدام IF... اخر
The IF... يتم استخدام بنية ELSE في T-SQL لتنفيذ كتلة من التعليمات البرمجية بشكل مشروط استنادا إلى دالة تقييم. تحدد عبارة IF ما إذا كانت العبارة أو الكتلة التالية (إذا BEGIN... يتم استخدام END) عمليات التنفيذ. إذا تم تقييم دالة التقييم إلى TRUE، يتم تنفيذ التعليمات البرمجية في الكتلة. عند تقييم دالة التقييم إلى FALSE أو UNKNOWN، لا يتم تنفيذ الكتلة، ما لم يتم استخدام الكلمة الأساسية ELSE الاختيارية لتحديد كتلة أخرى من التعليمات البرمجية.
في عبارة IF التالية، نطلب من قاعدة البيانات ما إذا كان OBJECT_ID IS NULL، وإذا كان الأمر كذلك، فأرجع عبارة PRINT. في هذا المثال، الكائن ليس فارغا وبالتالي FALSE، مما يعني أنه لن يتم تنفيذ التعليمات البرمجية BEGIN/END. سيتم تنفيذ عبارة PRINT فقط إذا لم يكن الكائن موجودا في قاعدة البيانات.
USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END;
نظرا للقيود مع التعليمات البرمجية أعلاه مع عبارة IF فقط، يمكن أن يكون هذا مربكا. يمنحك الجمع بين IF و ELSE مزيدا من المرونة مع المنطق في التعليمات البرمجية الخاصة بك، ويمكنك استخدام عبارات ELSE متعددة. باستخدام ELSE، لديك خيار تنفيذ آخر عند تقييم دالة تقييم IF إلى FALSE أو UNKNOWN، كما في المثال التالي:
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END
ELSE
BEGIN
PRINT 'The specified object exists';
END;
ضمن عمليات معالجة البيانات، يمكن أن يكون استخدام IF مع الكلمة الأساسية EXISTS أداة مفيدة للتحقق من وجود فعال، كما في المثال التالي:
IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
PRINT 'Employee has associated orders';
END;
فهم التكرار الحلقي باستخدام عبارات WHILE
يتم استخدام عبارة WHILE لتنفيذ التعليمات البرمجية في حلقة استنادا إلى دالة تقييم. مثل عبارة IF، تحدد عبارة WHILE ما إذا كانت العبارة أو الكتلة التالية (إذا BEGIN... يتم استخدام END) عمليات التنفيذ. يستمر تنفيذ الحلقة طالما يتم تقييم الشرط إلى TRUE. عادة ما تتحكم في التكرار الحلقي مع متغير تم اختباره بواسطة دالة التقييم ومعالجتها في نص الحلقة نفسها.
يستخدم @empid المثال التالي المتغير في دالة التقييم ويغير قيمته في BEGIN... كتلة END:
DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
BEGIN
SELECT @lname = lastname FROM HR.Employees
WHERE empid = @empid;
PRINT @lname;
SET @empid += 1;
END;
للحصول على خيارات إضافية ضمن حلقة WHILE، يمكنك استخدام الكلمات الأساسية CONTINUE و BREAK للتحكم في التدفق.