כשיוצרים דוח ב-SSRS ניתן להגדיר פרמטרים כך שבדוח עצמו יופיע תיבת טקסט שיש להזין לה ערך או קומבו שיש לבחור ממנו ערך, ובהתאם לכך ירוץ הדוח:
Select *
From sys.objects
Where schema_id=@S;
במקרה זה מדובר בפילטר פשוט, ובהגדרת הפרמטרים ניתן לקבוע כיצד יבחר ערך מתאים.
מסך הגדרת הפרמטרים כולל גם אפשרות Multi-Value: ניתן יהיה לבחור ערך אחד או יותר מתוך הרשימה:

במקרה כזה (אם נבחר ב-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
[...] מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים בעבר (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה [...]
פינגבאק מאת חיתוך בין רשימות - גרי רשף — 09/01/2012 @ 21:09
[...] מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה [...]
פינגבאק מאת חיתוך בין רשימות - Israel Database Portal — 07/11/2011 @ 12:35
[...] מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים בעבר (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה [...]
פינגבאק מאת חיתוך בין רשימות « הבלוג של גרי רשף — 24/08/2011 @ 19:28