大大毛 的筆記

            DDM's Note

          哪怕沒有辦法一定有說法,
          就算沒有鴿子一定有烏鴉,
          固執(zhí)無罪 夢想有價,
          讓他們驚訝.

          posts - 14, comments - 23, trackbacks - 0, articles - 58
             :: 首頁 ::  :: 聯(lián)系 ::  :: 管理

          SQLServer數(shù)據(jù)庫結(jié)構(gòu)的獲取

          Posted on 2006-11-21 22:54 大大毛 閱讀(757) 評論(0)  編輯  收藏 所屬分類: SQL
          ???這段時間好不容易找著一份臨時工,工作難找,只有苦干了。由於現(xiàn)在的項目需要通過VPN來連接遠(yuǎn)程的網(wǎng)絡(luò),工作中經(jīng)常需要通過遠(yuǎn)程桌面的方式來查看遠(yuǎn)程主機(jī)上的SQLServer系統(tǒng)的庫/表及數(shù)據(jù)集的特征和結(jié)構(gòu),但是同時連接的數(shù)量卻是有限,沒有辦法只能自行使用Select語句以獲取自己所需的資料了。

          ??????日常的需求是:
          ??????1.知道該DBMS上存在有哪些數(shù)據(jù)庫
          ??????2.知道具體的庫上存在有哪些用戶表
          ??????3.知道表的字段結(jié)構(gòu),類型,寬度以及Select順序
          ??????4.獲取表中的特征數(shù)據(jù)

          ??????而要從SQLServer的DBMS中獲取以上資料非常容易,只要具有權(quán)限,通過簡單的SQL語句即可實現(xiàn)。

          ??????1.獲取DBMS上存在有哪些數(shù)據(jù)庫
          select
          ????????name,
          ????????dbid
          ????
          from
          ????????master.dbo.sysdatabases
          ????
          WHERE
          ????????name?
          not?in?('master','tempdb','model','msdb')

          ??????2.獲取具體的庫上存在有哪些用戶表
          select
          ????????name,
          ????????id
          ????
          from
          ????????
          [ddmDataBaseName].dbo.sysobjects
          ????
          where
          ????????xtype?
          ='U'
          ?????????這條SQL語句需要傳遞一個參數(shù)(數(shù)據(jù)庫的名稱)以替換 [ddmDataBaseName] 參數(shù)。

          ??????3.獲取表的字段結(jié)構(gòu),類型,寬度以及Select順序
          select
          ????????col.name?colName,
          ????????type_Name(col.xtype)?colType,
          ????????col.length?colWidth,
          ????????
          case?isnullable?when?1?then?'允許'?else?'禁止'?end??nullable
          ????
          from
          ????????
          [ddmDataBaseName].dbo.syscolumns?col?join?[ddmDataBaseName].dbo.sysobjects?tab?on?col.id?=?tab.id
          ????
          where
          ????????tab.xtype?
          ='U'
          ????????
          and?tab.name='[ddmTableName]'
          ????
          order?by
          ????????tab.id,
          ????????col.colorder
          ?????????同樣的,這條SQL語句需要傳遞兩個參數(shù):
          ?????????[ddmDataBaseName]:數(shù)據(jù)庫名稱
          ?????????[ddmTableName]:表名稱

          ??????4.獲取表的特征數(shù)據(jù)集
          select
          ????????
          top?200?*
          ????
          from
          ????????
          [ddmDataBaseName].dbo.[ddmTableName]
          ????
          Order?by
          ????????
          NewID()
          ?????????由于表的記錄條數(shù)可能會很大,通常并不需要全部Select出來,因此使用了 Top 200 的關(guān)鍵字,而為了能夠隨機(jī)抽取數(shù)據(jù),這里使用了 Order by NewID()?。
          ?????????通過使用 3 + 4 的組合可以很容易地拼裝出一張表格出來,以便在日常工作中使用。

          ??????由于現(xiàn)在工作的系統(tǒng)是 繁體系統(tǒng),上班時又封網(wǎng),搞到文章中顯得簡繁一體了,呵呵。

          i am ddm

          主站蜘蛛池模板: 清原| 小金县| 太白县| 宣化县| 石嘴山市| 且末县| 吉安市| 象州县| 商南县| 青阳县| 巫山县| 禄劝| 长宁区| 象州县| 红安县| 益阳市| 桂林市| 札达县| 石阡县| 丹江口市| 桐城市| 娄烦县| 科技| 贵南县| 竹北市| 平原县| 遂昌县| 丹棱县| 根河市| 雷州市| 灵寿县| 磐安县| 太谷县| 兖州市| 海门市| 自治县| 延长县| 保亭| 图片| 司法| 将乐县|