獲取一張表中列的資料

2021-08-23 13:48:25 字數 1799 閱讀 9129

要獲取一張表的列本身的資料,首先要了解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

從一張表中複製資料到另一張表中

分為兩種情況,一種是目標表不存在,另一種是目標表已存在,語法是不同的。分別以sqlserver和oracle為例,兩者略有不同。sqlserver中,如果目標表不存在 select into新錶名from舊表名 sqlserver中,如果目標表已存在 insertinto新錶名select from...

將一張表的資料插入另外一張表

表cmb send sms create table cmb send sms send id bigint 20 not null auto increment comment 主鍵id phone no varchar 32 not null comment 手機號碼 status varcha...

資料庫將一張表插入另一張表中

1.將一張表的資料插入到另一張表中 insert into seckill hjh id,code,name,drumbeating,strat time,productid,price,amount,pay time,num once,note,statu,cause,userid,check u...