לכידת פלט של SQL דינאמי

13/09/2010

אין תגובות

אנחנו רוצים לקלוט לתוך משתנה את מספר השורות בטבלה או אולי במשפט SQL, למשל טבלת המערכת sysobjects:

Declare    @Cnt Int;

Select    @Cnt=Count(*) From sys.objects;

Select    @Cnt;

Go

קל ופשוט!

מה נעשה אם נקבל את שם הטבלה בתור משתנה? במקרה זה נצטרך לבנות ולהריץ משפט SQL דינאמי מכיוון שלא ניתן להריץ משפט בסגנון Select Count(*) From @Tbl, ואזי איך נקלוט את התוצאה לתוך משתנה?

להלן דוגמה כיצד:

Declare @Tbl NVarchar(Max),

        @SQL NVarchar(Max),

        @Cnt1 Int;


Select    @Tbl='sys.objects';


Select    @SQL='Select @Cnt2 = Count(*) 

                From '+@Tbl


Exec SP_ExecuteSQL @SQL,

                N'@Cnt2 Int Output',

                @Cnt2 = @Cnt1 Output;


Select    @Cnt1;

פרוצדורת המערכת SP_ExecuteSQL מריצה פקודות SQL דינאמיות,

ויש להבחין בין המשתנה Cnt2@ שמתקיים רק בקונטקסט של ה-SQL הדינאמי ומשמש כמשתנה Output,

והמשתנה Cnt1@ שקולט את הערך שלו.

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

כתיבת תגובה

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