logo

פונקציות SQL Server

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

להלן הכללים ליצירת פונקציות SQL Server:

  • לפונקציה חייבת להיות שם, והשם לא יכול להתחיל בתו מיוחד כמו @, $, # או תווים דומים אחרים.
  • משפטי SELECT הם היחידים שפועלים עם פונקציות.
  • אנחנו יכולים להשתמש בפונקציה בכל מקום כמו AVG, COUNT, SUM, MIN, DATE ופונקציות אחרות עם שאילתת SELECT ב-SQL.
  • בכל פעם שפונקציה נקראת, היא מבצעת קומפילציה.
  • פונקציות חייבות להחזיר ערך או תוצאה.
  • פונקציות משתמשות רק בפרמטרי קלט.
  • איננו יכולים להשתמש בהצהרות TRY ו-CATCH בפונקציות.

סוגי פונקציות

SQL Server מחלק את הפונקציות לשני סוגים:

  • פונקציות מערכת
  • פונקציות בהגדרת משתמש

הבה נתאר את שני הסוגים בפירוט.

פונקציות מערכת

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

להלן רשימה של כמה פונקציות מערכת המשמשות ב-SQL Server:

  • פונקציות מחרוזות (LEN, SUBSTRING, REPLACE, CONCAT, TRIM)
  • פונקציות תאריך ושעה (datetime, datetime2, smalldatetime)
  • פונקציות מצטברות (COUNT, MAX, MIN, SUM, AVG)
  • פונקציות מתמטיות (ABS, POWER, PI, EXP, LOG)
  • פונקציות דירוג (RANK, DENSE_RANK, ROW_NUMBER, NTILE)

התמונה הבאה מציגה את כל פונקציות מסד הנתונים המובנות המשמשות ב-SQL Server:

פונקציות SQL Server

פונקציות בהגדרת משתמש

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

שגיאת זמן ריצה

SQL Server מקטלג את הפונקציות המוגדרות על ידי המשתמש בעיקר לשני סוגים:

מהי מערכת הקבצים של לינוקס
  1. פונקציות סקלריות
  2. פונקציות בעלות ערך טבלה

להלן התיאורים של פונקציות UDF אלה.

פונקציות סקלריות

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

להלן התחביר הממחיש את יצירת הפונקציה הסקלרית ב-SQL Server:

 CREATE FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END 

פרמטרי התחביר לעיל מתוארים להלן:

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

דוגמא

דוגמה זו תיצור פונקציה ל לחשב את המכירות נטו בהתבסס על הכמות, המחיר וערך ההנחה:

 CREATE FUNCTION udfNet_Sales( @quantity INT, @price DEC(10,2), @discount DEC(3,2) ) RETURNS DEC(10,2) AS BEGIN RETURN @quantity * @price * (1 - @discount); END; 

כעת, אנו יכולים להשתמש בפונקציה זו כדי לחשב את המכירות נטו של כל הזמנת מכירות בטבלה המוגדרת.

תצוגת התמונה הבאה שבה נוכל למצוא את הפונקציות הסקלריות:

מדריך c#
פונקציות SQL Server

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

 SELECT dbo.udfNet_Sales(25, 500, 0.2) AS net_sales; 

הפעלת פונקציה זו תחזיר את המכירות נטו:

פונקציות SQL Server

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

 ALTER FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END 

אנו יכולים להשתמש במשפט שלהלן כדי להסיר את הפונקציה הסקלרית ממסד הנתונים של SQL Server:

 DROP FUNCTION [schema_name.]function_name; 

פונקציות בעלות ערך טבלה

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

אנו יכולים לסווג את הפונקציה בעלת ערך הטבלה לשני סוגים:

1. פונקציות טבלה-ערכים מוטבעות

פונקציית UDF זו מחזירה משתנה טבלה המבוסס על הפעולה שמבצעת הפונקציה. יש להשתמש במשפט SELECT יחיד כדי לקבוע את הערך של משתנה הטבלה.

מה זה אורקל

דוגמא

הדוגמה שלהלן תיצור פונקציית ערכי טבלה ותשלוף את הנתונים של טבלת העובדים:

 --It creates a table-valued function to get employees CREATE FUNCTION fudf_GetEmployee() RETURNS TABLE AS RETURN (SELECT * FROM Employee) 

בתחביר זה, ה טבלת החזרות מציין שהפונקציה תחזיר טבלה. מכיוון שאין התחלה... סוף הצהרה, זה פשוט שואל נתונים מטבלת העובדים. כמו כן, אם אין לו פרמטרים, הוא ייקרא ישירות.

אנו יכולים לקרוא לפונקציות בעלות ערך טבלה באמצעות ה- מ סעיף של בחר שאילתא. לדוגמה , נוכל לקרוא לאמור לעיל udf_GetEmployee לתפקד כמו להלן:

 SELECT * FROM udf_GetEmployee(); 

הפעלת פונקציה זו תחזיר את התוצאה הבאה:

פונקציות SQL Server

SQL Server מאפשר לנו גם לשנות את הפונקציות המוערכות בטבלה באמצעות מילת המפתח ALTER במקום מילת המפתח CREATE. שאר התסריט זהה.

פונקציות בעלות ערך טבלה מרובה הצהרות (MSTVF)

אלגוריתם מינימקס

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

הדוגמה הבאה יוצרת שם פונקציה 'רב-ערכים' שמחזיר את ה' @עוֹבֵד' שולחן. הוא מכיל שלושה שדות בשם id, emp_name ומשכורת מה- 'עוֹבֵד' טבלה באמצעות משפט INSERT, ולאחר מכן משתמש במשפט UPDATE כדי לעדכן את שם העובד.

 CREATE FUNCTION MULTIVALUED() RETURNS @Employee TABLE (id INT, emp_name VARCHAR(50), salary INT) AS BEGIN INSERT INTO @Employee SELECT E.id, E.emp_name, E.salary FROM Employee E; UPDATE @Employee SET emp_name = 'Graeme Smith' WHERE id = 3; RETURN END 

אנו יכולים לקרוא לפונקציות מרובות הצהרות בעלות ערכי טבלה על ידי שימוש בסעיף FROM של שאילתת ה-SELECT. לדוגמה , נוכל לקרוא לפונקציה שלמעלה כדלקמן:

 SELECT * FROM MULTIVALUED(); 

הפעלת פונקציה זו תחזיר את התוצאה הבאה:

פונקציות SQL Server

מתי יש להשתמש בפונקציות בעלות ערך טבלה?

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

סיכום

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