כשאנחנו מריצים קוד ב-SSMS הפלט שלו מופנה בדרך כלל ללשוניות ה-Results (פלט של שאילתות Select) וה-Messages (הודעות מערכת, פקודות Print ו-RaisError):
את הפלט הזה אנחנו רוצים לקלוט- לצרכי מעקב או לשם עיבוד, ויש לכך דרכים שונות – חלקן מוכרות וברורות מאליהן (למשל להעתיק אותן ידנית מה-SSMS ל-Excel) וחלקן פחות מוכרות ונועדו למקרים מיוחדים.
את הפלט בלשונית ה-Messages נרצה לשמור בדרך כלל בגלל פקודות Print ששילבנו בקוד לשם מעקב ו-Debug, ובגלל דיווחים אוטומטיים של המערכת כמו הודעות שגיאה – אם יש, וכדומה. את הפלט ניתן כאמור להעתיק ידנית, לשמור לקובץ על ידי קליק ימני ובחירה באופציה המתאימה, ואף להגדיר שמירה לקובץ כברירית מחדל:
כאשר מריצים באופן אוטומטי (לא ידנית דרך ה-SSMS) יש מספר אפשרויות:
1. ברוב המקרים הרצה אוטומטית נעשית דרך ג'וב שמאפשר לתזמן את הפעלתו האוטומטית של הקובץ, ואז ב-Step הרלוונטי שכולל הפעלה של פרוצדורה או קוד SQL – ניתן לקבוע בדף ה-Advanced שהפלט הנ"ל יופנה לקובץ או לטבלה, וכן להגדיר אם הפלט של כל הרצה יתווסף לקיים או ידרוס אותו:
- במקרים אחרים ניתן להריץ בעזרת SQLCmd ואת הפלט להפנות לקובץ (במקרה זה פלט הפרוצדורה MyPrc מופנה לקובץ הטקסט C:\MyPrc.txt):
- אופציה נוספת לנ"ל (שימוש ב-SQLCmd) היא להריץ אותו בעזרת XP_CmdShell ואת הפלט להפנות לטבלה:
Create Proc MyPrc As
Print GetDate();
Go
Create Table MyTbl(ID Int Identity Primary Key,
Trace Varchar(Max));
Go
Insert Into MyTbl
Exec XP_CmdShell 'sqlcmd -E -Q "Exec MyDB.dbo.MyPrc"';
Go
- מי שבונה ישום להפעלת הפרוצדורה (נניח- ממשק משתמש שנכתב ב-Dot.Net, תזמון בעזרת Control-M וכו') – יוכל לבדוק אם יש לכלי הפיתוח אופציה ללכוד את הפלט שלה (בדרך כלל יש).
כדאי לציין שבכל המקרים הנ"ל לא תתקיים הפרדה כמו ב-SSMS בין Results ן-Messages וכל הפלט ילכד ביחד.