משימת (Task) הסקריפט היא כמו הג'וקר במשחק קלפים – קלף שיכול להיות כל מה שרוצים.
בסקריפט אפשר ע"י קוד לעשות כל דבר, במיוחד אם אין אף משימה שמתאימה למה שנחוץ.
כמה שזה נשמע מלהיב – כדאי להשתמש במשימת הסקריפט בזהירות.
יש מתכנתים שמתפתים להשתמש הרבה במשימת הסקריפט, מתוך הרגל של כתיבת קוד.
כל מתכנת יודע, לצורך קבלת נתונים מהדטה בייס, ליצור connection, לכתוב מחרוזת של שאילתא משולבת במשתנים, ליצור recordset, להפעיל את השאילתא ולקבל את התוצאות במשתנה ה-recordset.
לפעמים זה נראה פשוט יותר מאשר ללמוד איך לעשות את זה במשימת 'data flow' או במשימת 'execute sql'. אבל לא כדאי ליפול לתוך המלכודת המתוקה הזו.
ראשית – כדאי לבדוק היטב אם אכן אף משימה לא מתאימה. המשימות נבנו בצורה כזו שהן עושות את הפעולה המבוקשת בצורה האופטימלית ביותר (יעילות ביצוע ומהירות), כך שאם אפשר לעשות את הפעולה הנצרכת בעזרת משימה מובנית של ה- SQL Server Integration Services - לא כדאי לעשות זאת ע"י הסקריפט.
אם כך, לצורך אלו דברים כדאי להשתמש במשימת הסקריפט ?
• הדבר הפשוט ביותר הוא הצגת הודעות במהלך הריצה.
שימו לב - אם יוצרים ג'וב שיריץ את ה-package לא מהמחשב האישי ובצורה מתוזמנת (למשל בשעות הלילה כשאין עומס על שרת מרכזי ) - יש להוריד את ההודעות ( או לסגור כהערה), כי לא יהיה באותו הזמן מי שיראה את ההודעות וילחץ על אישור כדי שהג'וב ימשיך את פעולתו.
• אפשר להכין תוכן מכתב אימייל מנתונים שהתקבלו מביצוע שאילתות SQL. תוכלו לשרשר את הערכים ומילות הקישור, ע"י פונקציות לטיפול במחרוזות.
ישנם עוד אפשרויות להשתמש במשימת סקריפט, אך העיקרון הוא, כאמור, רק בפעילויות שלא קיימות במשימות הזמינות של ה-SSIS.
משימת (Task) הסקריפט היא כמו הג'וקר במשחק קלפים – קלף שיכול להיות כל מה שרוצים.
בסקריפט אפשר ע"י קוד לעשות כל דבר, במיוחד אם אין אף משימה שמתאימה למה שנחוץ.
כמה שזה נשמע מלהיב – כדאי להשתמש במשימת הסקריפט בזהירות.
יש מתכנתים שמתפתים להשתמש הרבה במשימת הסקריפט, מתוך הרגל של כתיבת קוד.
כל מתכנת יודע, לצורך קבלת נתונים מהדטה בייס, ליצור connection, לכתוב מחרוזת של שאילתא משולבת במשתנים, ליצור recordset, להפעיל את השאילתא ולקבל את התוצאות במשתנה ה-recordset.
לפעמים זה נראה פשוט יותר מאשר ללמוד איך לעשות את זה במשימת 'data flow' או במשימת 'execute sql'. אבל לא כדאי ליפול לתוך המלכודת המתוקה הזו.
ראשית – כדאי לבדוק היטב אם אכן אף משימה לא מתאימה. המשימות נבנו בצורה כזו שהן עושות את הפעולה המבוקשת בצורה האופטימלית ביותר (יעילות ביצוע ומהירות), כך שאם אפשר לעשות את הפעולה הנצרכת בעזרת משימה מובנית של ה- SQL Server Integration Services - לא כדאי לעשות זאת ע"י הסקריפט.
אם כך, לצורך אלו דברים כדאי להשתמש במשימת הסקריפט ?
• הדבר הפשוט ביותר הוא הצגת הודעות במהלך הריצה.
שימו לב - אם יוצרים ג'וב שיריץ את ה-package לא מהמחשב האישי ובצורה מתוזמנת (למשל בשעות הלילה כשאין עומס על שרת מרכזי ) - יש להוריד את ההודעות ( או לסגור כהערה), כי לא יהיה באותו הזמן מי שיראה את ההודעות וילחץ על אישור כדי שהג'וב ימשיך את פעולתו.
• אפשר להכין תוכן מכתב אימייל מנתונים שהתקבלו מביצוע שאילתות SQL. תוכלו לשרשר את הערכים ומילות הקישור, ע"י פונקציות לטיפול במחרוזות.
• ויתכן שתרצו לבדוק אם השם תקין לפי קריטריונים של המערכת שלכם (למשל שם המכיל ערכים נומריים או תווים אלפא-ביתיים וכדומה) תוכלו להכין פונקציות בדיקה שונות במשימת הסקריפט ולהריץ את הפונקציות על המשתנים שהעברתם לסקריפט.
• בסקריפט ניתן לטפל בנתונים מחרוזתיים (במשתנים מסוג DT_STR וכדומה). לדוגמא, כאשר יש לכם קונטיינר שרץ בלולאה על תיקיה מסוימת עם קבצים ומכניס למשתנה את שם הקובץ נוכחי. אם שם כל קובץ אמור להכיל גם נתון מסוים, למשל: שנה/חודש, או מספר סידרתי וכו' ותרצו לפרק את הנתון מתוך שם הקובץ – תוכלו לעשות זאת בסקריפט ע"י פונקציות המטפלות במחרוזות. כמובן שתצטרכו לשם כך להעביר משתנה לקריאה לסקריפט ואולי גם להעביר משתנה גם לכתיבה, לצורך כתיבת הערך שהתקבל.
או ההיפך, אם תרצו ליצור קובץ חדש ששמו מכיל נתונים שהתקבלו מביצוע שאילתות SQL
• אפשר גם ליצור בסקריפט מונה בעזרת משתנה. על ידי המונה אפשר לבדוק, למשל, אם מספר הרצות ה-package על קובץ מסוים עולה על מספר מכסימלי המותר לפי הגדרות המערכת שלכם.
• ניתן גם לבצע חישובים מתמטיים על משתנים – למשל חישוב אחוז שגיאות עפ"י מספר השגיאות שהצטבר במונה במשימה מסוימת.
ישנה אומנם אפשרות לעשות דברים כאלו בעזרת ה-expression, אך רק לגבי שדות המאפיינים של המשימה או במשימת ה-''Derived Column – אך רק לגבי שדות הרשומות של קובץ/טבלת המקור באותו ה- 'data flow'.
ב-visual studio 2012 והלאה ישנה משימה חדשה בשם: Expression Task , שבה ניתן לקחת משתנה ובעזרתexpression להפעיל עליו פונקציות שונות (של מחרוזות, פעולות מתמטיות, בדיקת NULL, תאריך והמרה) ולבדוק אם מתקיימים תנאים מסוימים. זה מאפשר לעשות את הדברים ללא משימת הסקריפט ובצורה יעילה יותר.
• ניתן לבדוק האם בעקבות פעילות של משימת web service'' נוצרו קבצים מסוימים ולשמור את התוצאה במשתנה.
ישנם עוד אפשרויות להשתמש במשימת סקריפט, אך העיקרון הוא, כאמור, רק בפעילויות שלא קיימות במשימות הזמינות של ה-SSIS.
• ויתכן שתרצו לבדוק אם השם תקין לפי קריטריונים של המערכת שלכם (למשל שם המכיל ערכים נומריים או תווים אלפא-ביתיים וכדומה) תוכלו להכין פונקציות בדיקה שונות במשימת הסקריפט ולהריץ את הפונקציות על המשתנים שהעברתם לסקריפט.
• בסקריפט ניתן לטפל בנתונים מחרוזתיים (במשתנים מסוג DT_STR וכדומה). לדוגמא, כאשר יש לכם קונטיינר שרץ בלולאה על תיקיה מסוימת עם קבצים ומכניס למשתנה את שם הקובץ נוכחי. אם שם כל קובץ אמור להכיל גם נתון מסוים, למשל: שנה/חודש, או מספר סידרתי וכו' ותרצו לפרק את הנתון מתוך שם הקובץ – תוכלו לעשות זאת בסקריפט ע"י פונקציות המטפלות במחרוזות. כמובן שתצטרכו לשם כך להעביר משתנה לקריאה לסקריפט ואולי גם להעביר משתנה גם לכתיבה, לצורך כתיבת הערך שהתקבל.
או ההיפך, אם תרצו ליצור קובץ חדש ששמו מכיל נתונים שהתקבלו מביצוע שאילתות SQL
• אפשר גם ליצור בסקריפט מונה בעזרת משתנה. על ידי המונה אפשר לבדוק, למשל, אם מספר הרצות ה-package על קובץ מסוים עולה על מספר מכסימלי המותר לפי הגדרות המערכת שלכם.
• ניתן גם לבצע חישובים מתמטיים על משתנים – למשל חישוב אחוז שגיאות עפ"י מספר השגיאות שהצטבר במונה במשימה מסוימת.
ישנה אומנם אפשרות לעשות דברים כאלו בעזרת ה-expression, אך רק לגבי שדות המאפיינים של המשימה או במשימת ה-''Derived Column – אך רק לגבי שדות הרשומות של קובץ/טבלת המקור באותו ה- 'data flow'.
ב-visual studio 2012 והלאה ישנה משימה חדשה בשם: Expression Task , שבה ניתן לקחת משתנה ובעזרתexpression להפעיל עליו פונקציות שונות (של מחרוזות, פעולות מתמטיות, בדיקת NULL, תאריך והמרה) ולבדוק אם מתקיימים תנאים מסוימים. זה מאפשר לעשות את הדברים ללא משימת הסקריפט ובצורה יעילה יותר.
• ניתן לבדוק האם בעקבות פעילות של משימת web service'' נוצרו קבצים מסוימים ולשמור את התוצאה במשתנה.
ישנם עוד אפשרויות להשתמש במשימת סקריפט, אך העיקרון הוא, כאמור, רק בפעילויות שלא קיימות במשימות הזמינות של ה-SSIS.
תוכניתנית המפתחת בעבודתה מערכות אינטרא-נט-יות, המשלבות ג'וב של SSIS . בעלת אתר להדרכה בתכנות אינטגריישן סרוויסז: http://www.ssis2go.com ודף עיסקי בפייסבוק. דוא"ל: ssis2go.com