sqlserver中擷取一張表中列的資料

來源:互聯網
上載者:User
要擷取一張表的列本身的資料,首先要瞭解sqlserver中的五張系統資料表
sysobjects,syscolumns,systypes,sysindexes,sysindexkeys

sysobjects,每個資料庫都有一張這樣的系統資料表,它記錄了所有資料庫物件,比如我們從裡面可以擷取主鍵,表對象名等
sysindexes,每個資料庫都有一張這樣的系統資料表,它記錄了所有表的索引,包括索引對象名等
sysindexkeys,每個資料庫都有一張這樣的系統資料表,它記錄了所有的索引與對應的列
syscolumns,每個資料庫都有一張這樣的系統資料表,它記錄了所有表的列,我們從裡面可以擷取表的某一列的序號,名稱,是否可以為空白等。
systypes,每個資料庫都有一張這樣的系統資料表,它記錄了所有的資料類型,我們從裡面可以擷取表的某一列資料類型的名稱,比如:varchar,int等

sysobjects裡有個xtype欄位,char(2)類型,它記錄的是對象的類型:比如PK是主鍵,S是使用者表,P是預存程序等,都是大寫的,還有一個name欄位,記錄的是對象的名稱
sysindexes裡有個name欄位,記錄了對名象名稱,還有個indid欄位,記錄了索引編號
sysindexkeys裡有個indid欄位,記錄了索引編號,還有個colid,記錄了列編號
syscolumns裡也有個xtype欄位,int類型,但它記錄的卻是本列資料類型的代碼,一些數字,這些數字與systypes表裡的xtype對應起來,這樣就可以從systypes表中擷取資料類型的名稱了,還有個colid欄位,記錄了列編號,還有個name欄位,記錄了列名,colorder欄位記錄了列序號
systypes裡有個xtype,int類型,記錄了本列資料類型的代碼,還有個name欄位,記錄了資料類型名

syscolumns,sysindexes,sysindexkeys中的id欄位對應的是所屬表的id,而不是自己資料的id
syscolumns,sysindexes,sysindexkeys中的資料不帶有唯一性,因為這是所有表共用一個系統資料表,所以colid,indid之類的都只是在id即表名不同的情況下唯一

這樣,跟據以上的分析,我們就能得到一個表的欄位的具體資訊了
從syscolumns中得到列序號,列名,是否可以為空白
從syscolumns和systypes中得到資料類型
從全部五張表中得到主鍵資訊
可以看出,主要是得到主鍵用的代碼多啊!

select  a.colorder Number,
a.name ColumnName,
b.name Type,
(case when a.isnullable=1 then 'Y'else 'N' end) AllowNull,
(case when
(SELECT count(*) FROM sysobjects WHERE name IN
(SELECT name FROM sysindexes WHERE id = a.id AND indid in
(SELECT indid FROM sysindexkeys WHERE id = a.id AND colid in
(SELECT colid FROM syscolumns WHERE id = a.id AND name = a.name)))
AND xtype = 'PK')>0 then 'Y' else 'N'end) IsPrimaryKey
from  syscolumns a left join systypes b on  a.xtype=b.xusertype
where a.id=OBJECT_ID('b') order by a.colorder

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.