הבלוג של גרי רשף

03/10/2010

אופציית Multi-Value ב-Reporting Services

Filed under: Uncategorized — תגיות: , , , — גרי רשף @ 21:41

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

Select *

From sys.objects

Where schema_id=@S;

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

מסך הגדרת הפרמטרים כולל גם אפשרות Multi-Value: ניתן יהיה לבחור ערך אחד או יותר מתוך הרשימה:

clip_image002

במקרה כזה (אם נבחר ב-Multi Value)- יש לשנות את השליפה הנ"ל לשליפה הבאה:

Select    *

From    sys.objects

Where    schema_id In (@S);

הסינטקס הזה לכאורה שגוי- נסו להריץ את הקוד הבא ותקבלו שגיאה מכיוון שבעמודה schema_id יש מספרים ו-S@ הוא טקסטואלי:

Declare @S Varchar(Max);

Set @S='1,4';

Select *

From sys.objects

Where schema_id In (@S);

Go

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

Declare @S Varchar(Max);

Set @S='S,U';

Select *

From sys.objects

Where type In (@S);

Go

הסיבה ברורה- המערכת מתייחסת למשתנה S@ כאל ערך בודד, ואין אף שורה בה עמודת type מכילה את הערך 'S,U'..

מדוע זה כן עובד ב-SSRS? כנראה מפני שהמערכת הופכת את ה-SQL לדינאמי, בערך כמו בדוגמה הזו:

Declare @S Varchar(Max),

@SQL Varchar(Max);

Set @S='1,4';

Set @SQL='Select * From sys.objects Where schema_id In ('+@S+');'

Exec(@SQL);

Go

ומה קורה כשמפעילים פרוצדורה המפעילה שליפה ולא שליפה באופן ישיר?

המערכת תפעיל את הפרוצדורה באופן דינאמי כנ"ל, אבל הפרוצדורה עצמה תרוץ כפי שכתבנו אותה, והשליפה שבתוכה לא תפעל כמתוכנן.. כיצד נכתוב את השליפה בתוך הפרוצדורה כך שתעבוד?

פתרון:

Declare @S Varchar(Max);

Set @S='1,4';

Select *

From sys.objects

Where ','+@S+',' Like '%,'+Cast(schema_id As Varchar)+',%';

Go

מודעות פרסומת

3 תגובות »

  1. […] מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים בעבר (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה […]

    פינגבאק של חיתוך בין רשימות - גרי רשף — 09/01/2012 @ 21:09

  2. […] מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה […]

    פינגבאק של חיתוך בין רשימות - Israel Database Portal — 07/11/2011 @ 12:35

  3. […] מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים בעבר (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה […]

    פינגבאק של חיתוך בין רשימות « הבלוג של גרי רשף — 24/08/2011 @ 19:28


RSS feed for comments on this post. TrackBack URI

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: