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

15/04/2011

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

שייך לקטגוריה: 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 של התגובות על הרשומה הזו טרקבאק קישור

כתיבת תגובה

Fill in your details below or click an icon to log in:

WordPress.com Logo

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

Twitter picture

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

Facebook photo

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

Connecting to %s

ערכת עיצוב: Shocking Blue Green. בלוג בוורדפרס.קום.

Follow

Get every new post delivered to your Inbox.

הצטרפו אל 25 שכבר עוקבים אחריו