none
שליחת מייל עם שאילתה בגוף ההודעה RRS feed

  • שאלה

  • היי,

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

    EXEC msdb.dbo.sp_send_dbmail

        @profile_name = 'Profile',

        @subject = 'Automated Success Message' ,

        @recipients = 'my@mail.org.il;',

        @query = ''select SUPDES from SUPPLIERS

                                      WHERE (select convert(nvarchar(30),getdate() , 103 ))  = 

                                            system.dbo.tabula_dtoa(TEL_WDATE, 'DD/MM/YYYY ',' ',' '), 

        @attach_query_result_as_file = o ;

    בפורמט הזה אני מקבל הודעת שגיאה

    Incorrect syntax near ','.

    כלומר שגיאה בשורה הלפני אחרונה- ולא מצליח לפתור את זה.

    כמה דברים שוידאתי:

    1. השאילתה תקינה במידה ואני מריץ אותה בנפרד.

    2. אם אני מבטל את   @attach_query_result_as_file = o ; המייל נשלח אך ללא התוצאות של השאילתה במייל.

    3. אם אני מעלה שאת   @attach_query_result_as_file = o  שורה למעלה- המייל נשלח ללא התוצאות של השאילתה במייל.

    מה טעות ה- syntax כי כבר ניסיתי הכל....

    תודה

    יום רביעי 14 נובמבר 2012 10:07

תשובות

  • אם אתה העתקת את השאילתה בדיוק כמו שאתה מריץ אז אתה אמור לקבל הודעת שגיאה מכיוון שיש לך 2 מרחאות לפני השאילתה והשאילתה מחוץ למרחאות

    	 @query = ''select SUPDES from SUPPLIERS
                                      WHERE (select convert(nvarchar(30),getdate() , 103 ))  = 
                                            system.dbo.tabula_dtoa(TEL_WDATE, 'DD/MM/YYYY ',' ',' '),

    וזה מה שצריך להיות:

        @query = 'select SUPDES from SUPPLIERS
                                      WHERE (select convert(nvarchar(30),getdate() , 103 ))  = 
                                            system.dbo.tabula_dtoa(TEL_WDATE, ''DD/MM/YYYY '','' '','' '')', 

    כמו כן תקפיד כמו שכתב לך יוסי לעבוד עם אובייקטים בשם המרובע או המשולש לפחות (מרובע הכוונה החל משם ה INSTANCE ומשולש הכוונה החל משם מסד הנתונים)


    signature

    • הוצע כתשובה על-ידי Geri_Reshef יום רביעי 14 נובמבר 2012 17:39
    • סומן כתשובה על-ידי Eran Sharvit יום שני 19 נובמבר 2012 13:26
    יום רביעי 14 נובמבר 2012 13:43
    מנחה דיון

כל התגובות

  • שלום,

    העתקתי וניסיתי אצלי

    אני חושב שהשגיאה שלך ב syntax  היא שבמקום אפס "0"  רשום את האות "O"

    לאחר ההחלפה לאפס זה עובד מבחינת syntax  אבל אני לא רואה טעם לציין 0 בפרמטר הזה  (attach_query_result_as_file)  כי זה ה default

    לגבי מה מגיע במייל - לא הצלחתי לבדוק עדיין ...

    מקווה שעזרתי,

    נועם

     

     

    • הוצע כתשובה על-ידי tetitu יום רביעי 14 נובמבר 2012 12:33
    יום רביעי 14 נובמבר 2012 10:45
  • הסינטקסט ע"פ מיקרוסופט

    http://msdn.microsoft.com/en-us/library/ms190307.aspx

    יום רביעי 14 נובמבר 2012 12:33
  • נועם,

    עבדתי לפי ה- syntax המצ"ב,כמובן. בעיית ה- syntax שלי היא בכול מה שקשור לשיבוץ השאילתה הספציפית הנ"ל ל- @query כי אם למשל אני אשבץ select 1+2 זה עובד כמו שצריך.

    שוב חייב להדגיש: אם אני מריץ בלי @attach_query_result_as_file = o זה רץ.

    עוד משהו שיכול לרמוז:באופן הזה שאני מריץ ( בלי השורה שלהלן) בסוף השורה אני לא שם שום תו, לא פסיק ולא ; אז כאמור הוא שולח מייל ללא תוצאות השאילתה בגוף המיייל.

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

    יום רביעי 14 נובמבר 2012 12:46
  • היי Eran,

    תנסה להוסיף לשאילתה שלך את שם ה-DB + שם הסכמה: לדוגמא:

    SELECT SUPDES FROM MyDataBaseName.dbo.SUPPLIERS

    זה אמור לעזור לך....

    חקיקת יוסי


    • נערך על-ידי Yossi Hakikat יום רביעי 14 נובמבר 2012 13:39
    יום רביעי 14 נובמבר 2012 13:03
  • אם כך אז יש לך בעיה בגרשיים שתוחמים את הטקסט של השאילתא עצמה.

    תנסה לעבוד עם שילוב של גרשיים כפולים וגרשיים רגילים  עד שזה יעבוד  ותראה את כל השאילה הפנימית אדומה.

    בכל מקרה הפרמטר attach_query_result_as_file  לא יעבוד כשהוא שווה ל "o" כי הוא מסוג bit שמקבל רק אפס או אחד

    מקווה שעזרתי,

    נועם

    יום רביעי 14 נובמבר 2012 13:40
  • אם אתה העתקת את השאילתה בדיוק כמו שאתה מריץ אז אתה אמור לקבל הודעת שגיאה מכיוון שיש לך 2 מרחאות לפני השאילתה והשאילתה מחוץ למרחאות

    	 @query = ''select SUPDES from SUPPLIERS
                                      WHERE (select convert(nvarchar(30),getdate() , 103 ))  = 
                                            system.dbo.tabula_dtoa(TEL_WDATE, 'DD/MM/YYYY ',' ',' '),

    וזה מה שצריך להיות:

        @query = 'select SUPDES from SUPPLIERS
                                      WHERE (select convert(nvarchar(30),getdate() , 103 ))  = 
                                            system.dbo.tabula_dtoa(TEL_WDATE, ''DD/MM/YYYY '','' '','' '')', 

    כמו כן תקפיד כמו שכתב לך יוסי לעבוד עם אובייקטים בשם המרובע או המשולש לפחות (מרובע הכוונה החל משם ה INSTANCE ומשולש הכוונה החל משם מסד הנתונים)


    signature

    • הוצע כתשובה על-ידי Geri_Reshef יום רביעי 14 נובמבר 2012 17:39
    • סומן כתשובה על-ידי Eran Sharvit יום שני 19 נובמבר 2012 13:26
    יום רביעי 14 נובמבר 2012 13:43
    מנחה דיון
  • היי,

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

    הסיבה לכול ההודעות היא יותר מדי גרשיים, שכשאני מריץ רגיל ב- select פשוט זה עובד, אבל כשאני משבץ ב- sned mail זה נופל.

    דוגמא :

    select col1 + 'shalom' from table---- עובד נהדר כשאני מריץ רגיל ב- sms.

    אך אם אני משבץ ב- send mail אני צריך להוסיף עוד גרש בכל צד של ה- shalom כדי שזה יעבוד- הגיוני. מקובל.

    אבל בשאילתה של תחילת השירשור הוספתי אבל זה לא עוזר.

    הבעיות ההיסטוריות שיש לי לדוגמא הן:

    אם אני שם ב- job שליחת מייל עם סקריפט select 1+2 זה לא עובד.

    כשאני מריץ את הפקודה כולה ב- sms זה רץ ונשלח מייל אבל ב- job זה נכשל כשהודעת השגיאה היא:

    Error formatting query, probably invalid parameters [SQLSTATE 42000] (Error 22050).  The step failed.

    עקפתי באמצעות טבלה זמנית ושלום על ישראל.

    יום חמישי 15 נובמבר 2012 10:07