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

15/04/2011

שליפת שמות כל הטבלאות בשרת

Filed under: Uncategorized — תגיות: , , — גרי רשף @ 18:28

המשימה כשלעצמה לא אמורה להיות מסובכת במיוחד-
יוצרים פרוצדורה שעוברת בלולאה על כל הדטבייסים,
שולפת את שמות הטבלאות לתוך טבלה זמנית,
ולסיום מבצעת Select על הטבלה;
אלא שאני משתדל לתת פתרונות שאינם כוללים יצירה של אובייקטים (מה שמצריך הרשאות מיוחדות והתרפסות בפני ה-DBA),
ושהשליפה נראית כשליפה- פקודת Select שאפשר לפלטר, למיין, לבצע Join וכו';
ומאז שנגלו לי נפלאות ה-OpenRowSet מתברר שניתן להצפין בתוכו קטעי קוד ולקבל את מבוקשי.

נתחיל בקטעי הקוד, ובהמשך נפעיל את ה-OpenRowSet:

Declare @SQL Varchar(Max);
Select @SQL=IsNull(@SQL+' Union All ','')+'Select '''+name+''' DB,name collate Database_Default Tbl From ['+name+'].sys.tables' From sys.databases;
Print @SQL;
Exec(@SQL);

הקוד משרשר לתוך המשתנה @SQL פקודות Select מטבלאות sys.tables בכל הדטבייסים ובינהן Union All,

ואת ה-SQL הדינאמי שהתקבל – מפעיל בעזרת Exec (בדוגמה זו הדפסתי את ה-SQL לבקרה על ידי Print).

בגלל שלדטבייסים יכולים להיות Cillations שונים – מוסיפים Collate Database_Default לעמודות הטקסט.

כעת "נעטוף" את הקוד הנ"ל ב-OpenRowSet ונריץ:

Select *
From   OpenRowSet('SQLNCLI',
                'Server=.;Trusted_Connection=yes;Database=MyDB',
                'set fmtonly off;
                Declare @SQL Varchar(Max);
                Select @SQL=IsNull(@SQL+'' Union All '','''')+''Select ''''''+name+'''''' DB,name collate Database_Default Tbl From [''+name+''].sys.tables'' From sys.databases;
                Exec(@SQL);') T
Order By DB,
        Tbl;

clip_image002

לתרגול- אפשר לנסות להוסיף עמודות נוספות, או לפנות לטבלאות מערכת אחרות; למשל ל-sys.objects ולצרף את עמודת type_desc.

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

תגובה אחת »

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

    תגובה של yakov luria — 27/03/2012 @ 14:20


RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

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

הלוגו של WordPress.com

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

תמונת Twitter

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

תמונת Facebook

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

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

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

מתחבר ל-%s

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

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