בפוסט קודם הראתי כיצד ללכוד פלט פרוצדורה, כשהדגש היה על הפלט המופנה ללשונית ה-Messages (בתחתית צילום המסך):
את הפלט המופנה ללשונית ה-Results ניתן להפנות לטבלה ולשלוף ממנה לאחר מכן. למשל:
Create Table #SP_Who(spid Int,
ecid Int,
status Varchar(20),
loginame Sysname Null,
hostname Sysname Null,
blk Int,
dbname Sysname Null,
cmd Varchar(20),
request_id Int);
Go
Insert
Into #SP_Who
Exec SP_Who;
Go
Select * From #SP_Who;
Go
מה קורה אם בפרוצדורה מחזירה סט בן כמה עשרות עמודות ואין לנו כח ליצור ידנית טבלה?
האם ניתן לבצע משהו בסגנון Select .. Into .. שמפנה פלט של שליפה לתוך טבלה שנוצרת מעצמה?
כן:
Select *
Into #SP_Who
From OPENROWSET('SQLOLEDB','Server=MyServer;Trusted_Connection=yes;','Exec SP_Who;');
Go
Select * From #SP_Who;
Go
היי גרי, זה ג'רבי
האם ניתן להשתמש ב OPENROWSET לנושאים נוספים כמו תפיסת משתנים ל CURSOR (למרות ש CURSOR – ים ל מומלצים מבחינת ביצועים…)
זה מצלצל לי דומה ל ROWTYPE% באורקל
פשוט אם יש מספר משתנים לקלוט כל רשומה , במקום לכתוב משהו לא סימפטי כמו:
FETCH NEXT FROM QUERYID_CURSOR
INTO @A,@B,@C,@D,@E
באורקל ניתן לכתוב משהו בסגנון:
REC := TABLE_NAME%ROWTYPE
FETCH NEXT FROM QUERYID_CURSOR
INTO REC
ואז לחסוך את כל ה @A,@B,@C,@D,@E
האם ניתן להשתמש ב – OPENROWSET באופן דומה?
תודה מראש…
תגובה מאת אבי ג'רבי — 29/08/2011 @ 16:50
לדעתי לא (לגבי ה-OpenRowset)..
אני מבין מה אתה אומר- מחברים את כל המשתנים ל"רשומה" ומפנים אליה את ה-Fetch Next. למיטב ידיעתי אין משהו כזה, אבל זה מה שמפריע לך? הרי כותבים את זה פעם אחת בפרוצדורה..
תגובה מאת גרי רשף — 29/08/2011 @ 20:15