השתמש בבלוקים IF ו- WHILE כדי לשלוט בזרימת התוכנית

הושלמה

כל שפות התיכנות כוללות רכיבים שיעזרו לך לקבוע את זרימת התוכנית, או את הסדר שבו מבוצעים הצהרות. למרות שלא מוצגות באופן מלא כשפות כמו C#, T-SQL מספק ערכה של מילות מפתח של שליטה בזרימה שניתן להשתמש בהן כדי לבצע בדיקות לוגיות וליצור לולאות המכילות את משפטי המניפולציה של נתוני T-SQL. בשיעור זה, תלמד כיצד להשתמש במילות המפתח T-SQL IF ו- WHILE.

הבנת בקרת T-SQL בשפת הזרימה

SQL Server מספק רכיבי שפה אשר שולטים בזרימת ביצוע התוכנית בתוך אצוות T-SQL, פרוצדורות מאוחסנות ופונקציות מרובות דרכים המוגדרות על-ידי המשתמש. רכיבים אלה של בקרת זרימה מאפשרים לך לקבוע באופן תיכנותי אם לבצע משפטים ולקבוע באופן תיכנותי את הסדר של המשפטים שיש לבצע.

רכיבים אלה כוללים, אך אינם מוגבלים ל:

  • אם... ELSE, שמבצע קוד בהתבסס על ביטוי בוליאני.
  • WHILE, אשר יוצר לולאה שמבצעת אספקת תנאי היא True.
  • להתחיל... END, המגדיר סידרה של משפטי T-SQL שיש לבצע יחד.
  • מילות מפתח אחרות, לדוגמה, BREAK, CONTINUE, WAITFOR ו- RETURN, המשמשות לתמיכה בפעולות בקרת זרימה של T-SQL.

להלן דוגמה של משפט IF:

IF OBJECT_ID('dbo.tl') IS NOT NULL
    DROP TABLE dbo.tl
GO

שימוש בלוגיקה מותנית בתוכניות שלך באמצעות IF... אחר

ה- IF... מבנה ELSE משמש ב- T-SQL לביצוע מותנה של בלוק קוד בהתבסס על סינדיקאט. משפט IF קובע אם המשפט או הבלוק הבאים (אם BEGIN... הפונקציה END נמצאת בשימוש) מופעלת. אם ה- Predicate מוערך כ- TRUE, הקוד בבלוק מבוצע. כאשר ה- Predicate מוערך כ- FALSE או לא ידוע, הבלוק אינו מבוצע, אלא אם מילת המפתח האופציונלית ELSE משמשת לזיהוי בלוק קוד אחר.

במשפט IF הבא, אנו שואלים את מסד הנתונים אם OBJECT_ID IS NULL, ואם כן, החזר את משפט PRINT. בדוגמה זו, האובייקט אינו Null ולכן הוא 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 Predicate מוערך כ- 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. בדרך כלל, אתה שולט בלולאה עם משתנה שנבדק על-ידי ה- Predicate וטיפול בו בגוף הלולאה עצמה.

הדוגמה הבאה משתמשת @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 כדי לשלוט בזרימה.