在SQL
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比呈貢網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式呈貢網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋呈貢地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
server2000中,一個(gè)數(shù)據(jù)庫(kù)中最多可以創(chuàng)建20億個(gè)表,每個(gè)表最多可以定義1024個(gè)列(字段),每行最多可以存儲(chǔ)8060字節(jié),表的行數(shù)及總大小僅受可用存儲(chǔ)空間的限制。
microsoft sql server management studio中展開對(duì)應(yīng)表下面的列信息不就可以看到列的詳細(xì)信息了么?當(dāng)然這是可以的,但這里我們主要講的時(shí)如何利用sql語句來查詢指定表的列信息。
利用sql語句來查詢列信息,就是要用到系統(tǒng)視圖sys.columns,這個(gè)視圖記錄了數(shù)據(jù)庫(kù)中所有表,視圖,表值函數(shù)等的所有列信息。我們可以利用語句select * from sys.columns來查看這個(gè)視圖返回的信息。
sys.columns返回的列比較多,大部分情況下很多列的信息我們可能用不到,下面我們只解釋一下比較常用的列的信息。
1,object_id--這個(gè)列是比較重要的,它是返回當(dāng)前列所屬表的ID。利用它,我們就可以查詢指定表的所有列信息,比如下面的sql語句是查詢表table1的所有列信息。
select * from sys.columns where object_id=object_id('table1')
2,name--該列的列名。
3,column_id--該列在數(shù)據(jù)庫(kù)中的ID,注意,數(shù)據(jù)庫(kù)中任何對(duì)象的ID都是唯一的。
4,system_type_id--該列的類型的ID,和下面max_length,precision,scale三列一起可以來舉個(gè)示例。
5,max_length--該列的最大長(zhǎng)度
6,precisionp--如果這列是數(shù)值列,那么這是該列的精度,否則就是0
7,scale--如果這列是數(shù)值列,那么這就是列的小數(shù)位數(shù),否則就是0
system_type_id,max_length,precision,scale四列結(jié)合系統(tǒng)視圖sys.types一起我們來舉個(gè)示例。
如果我們要查詢表table1的所有列,及列的類型,列的精度,列的小數(shù)位數(shù),sql語句如下:
select a.name,b.name,a.max_length,a.precision,a.scale
from sys.columns a left join sys.types b on a.user_type_id=b.user_type_id
where a.object_id=object_id('table1')
8,is_nullable--該列是否可以為null
9,is_identity--該列是否是標(biāo)識(shí)列
10,is_computed--該列是否是計(jì)算列。利用該列,我們也就可以查詢某個(gè)表的所有計(jì)算列了,比如我們要查詢表table1中的所有計(jì)算列,sql語句如下:
select * from sys.columns where object_id=object_id('table1') and is_computed=1
sys.columns視圖中常用的列就是這10列了,其它列的信息大家可以到SQLServer 2005聯(lián)機(jī)叢書中查詢。
select count(name) from syscolumns
where id=( select id from sysobjects where name='表名' and xtype='U')
說明:select id from sysobjects where name='表名' and xtype='U' 從sysobjects 里查詢表類型為U(非系統(tǒng))的表的id ,假設(shè)查到的是 1002 ;
select count(name) from syscolumns where id=1002 查的是系統(tǒng)列syscolumns 里表id是1002的列數(shù)。
你可以隨便建個(gè)表,然后分步運(yùn)行這兩句看看
就拿你這個(gè)來說
select?a+b+c?from?table
得到幾就是幾了唄,如果是其他字符,比如
select?case?when?a='x'?then?1?else?0?end?+case?when?b='x'?then?1?else?0?end?+case?when?c='x'?then?1?else?0?end?from?table
如果是指定列查詢,那么肯定就知道列數(shù)。
關(guān)鍵是遇到*這樣的情況,那么就可以根據(jù)數(shù)據(jù)字典,來查詢a, b表的字段個(gè)數(shù)。再加上最后一個(gè)c.id的1,就是總列數(shù)了。
SQLSERVER,可以使用
SELECT COUNT(*) FROM SYSCOLUMNS A INNER JOIN SYSOBJECTS B ON A.ID = B.ID AND B.XTYPE = 'U' AND B.NAME IN ('a','b')
這個(gè)結(jié)果加上1,就是你這個(gè)查詢的總個(gè)數(shù)了。
所以,遇到星號(hào)查詢?nèi)碜侄蔚?,可以從?shù)據(jù)字典表中查詢所涉及的表一共有多少個(gè)字段數(shù)。
ORACLE 可以使用USER_TAB_COLS,或者是DBA_TAB_COLS
SELECT COUNT(*) FROM USER_TAB_COLS WHERE TABLE_NAME IN ('A','B')---大寫
--讀取庫(kù)中的所有表名
select name from sysobjects where xtype='u'
--讀取指定表的所有列名
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')
獲取數(shù)據(jù)庫(kù)表名和字段
sqlserver中各個(gè)系統(tǒng)表的作用
sysaltfiles 主數(shù)據(jù)庫(kù) 保存數(shù)據(jù)庫(kù)的文件
syscharsets 主數(shù)據(jù)庫(kù) 字符集與排序順序
sysconfigures 主數(shù)據(jù)庫(kù) 配置選項(xiàng)
syscurconfigs 主數(shù)據(jù)庫(kù) 當(dāng)前配置選項(xiàng)
sysdatabases 主數(shù)據(jù)庫(kù) 服務(wù)器中的數(shù)據(jù)庫(kù)
syslanguages 主數(shù)據(jù)庫(kù) 語言
syslogins 主數(shù)據(jù)庫(kù) 登陸帳號(hào)信息
sysoledbusers 主數(shù)據(jù)庫(kù) 鏈接服務(wù)器登陸信息
sysprocesses 主數(shù)據(jù)庫(kù) 進(jìn)程
sysremotelogins主數(shù)據(jù)庫(kù) 遠(yuǎn)程登錄帳號(hào)
syscolumns 每個(gè)數(shù)據(jù)庫(kù) 列
sysconstrains 每個(gè)數(shù)據(jù)庫(kù) 限制
sysfilegroups 每個(gè)數(shù)據(jù)庫(kù) 文件組
sysfiles 每個(gè)數(shù)據(jù)庫(kù) 文件
sysforeignkeys 每個(gè)數(shù)據(jù)庫(kù) 外部關(guān)鍵字
sysindexs 每個(gè)數(shù)據(jù)庫(kù) 索引
sysmenbers 每個(gè)數(shù)據(jù)庫(kù) 角色成員
sysobjects 每個(gè)數(shù)據(jù)庫(kù) 所有數(shù)據(jù)庫(kù)對(duì)象
syspermissions 每個(gè)數(shù)據(jù)庫(kù) 權(quán)限
systypes 每個(gè)數(shù)據(jù)庫(kù) 用戶定義數(shù)據(jù)類型
select 列名=name from syscolumns where id=object_id(N'要查的表名')