לכידת פלט פרוצדורה

24/02/2011

תגיות: , ,
תגובה אחת

כשאנחנו מריצים קוד ב-SSMS הפלט שלו מופנה בדרך כלל ללשוניות ה-Results (פלט של שאילתות Select) וה-Messages (הודעות מערכת, פקודות Print ו-RaisError):

clip_image002

את הפלט הזה אנחנו רוצים לקלוט- לצרכי מעקב או לשם עיבוד, ויש לכך דרכים שונות – חלקן מוכרות וברורות מאליהן (למשל להעתיק אותן ידנית מה-SSMS ל-Excel) וחלקן פחות מוכרות ונועדו למקרים מיוחדים.

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

clip_image004

כאשר מריצים באופן אוטומטי (לא ידנית דרך ה-SSMS) יש מספר אפשרויות:

1. ברוב המקרים הרצה אוטומטית נעשית דרך ג'וב שמאפשר לתזמן את הפעלתו האוטומטית של הקובץ, ואז ב-Step הרלוונטי שכולל הפעלה של פרוצדורה או קוד SQL – ניתן לקבוע בדף ה-Advanced שהפלט הנ"ל יופנה לקובץ או לטבלה, וכן להגדיר אם הפלט של כל הרצה יתווסף לקיים או ידרוס אותו:

clip_image006

  1. במקרים אחרים ניתן להריץ בעזרת SQLCmd ואת הפלט להפנות לקובץ (במקרה זה פלט הפרוצדורה MyPrc מופנה לקובץ הטקסט C:\MyPrc.txt):

clip_image008

  1. אופציה נוספת לנ"ל (שימוש ב-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

תגים של Technorati:? ,,,,

clip_image010

  1. מי שבונה ישום להפעלת הפרוצדורה (נניח- ממשק משתמש שנכתב ב-Dot.Net, תזמון בעזרת Control-M וכו') – יוכל לבדוק אם יש לכלי הפיתוח אופציה ללכוד את הפלט שלה (בדרך כלל יש).

כדאי לציין שבכל המקרים הנ"ל לא תתקיים הפרדה כמו ב-SSMS בין Results ן-Messages וכל הפלט ילכד ביחד.

הוסף תגובה
facebook linkedin twitter email

להגיב על Ella Maschiach לבטל

האימייל לא יוצג באתר. שדות החובה מסומנים *

תגובה אחת

  1. Ella Maschiach27/02/2011 ב 16:30

    גרי, גם אם באיחור, רציתי לברך אותך על "בלוגר החודש" (סורי, היה שבוע עמוס בעבודה). אכן מאוד ראוי! מעבר לקצב כתיבת הפוסטים, אני מוצאת הרבה ידע בכל פוסט ופוסט. אני מודה לך על הרצון להעשיר גם אותנו.
    off topic – נחמד להכיר את הרקע ממנו באת וגם לפגוש (במובן כלשהו) את שאר המשפחה 🙂

    הגב