1、擷取使用者表名:
SELECT name FROM sysobjects WHERE type = 'U' AND sysstat = '83'
注意:一般情況只需要type = 'U',但有時候會有系統資料表混在其中(不知道什麼原因),加上後面一句後就能刪除這些系統資料表了
2、得到表中的所有列資訊(包含資料類型名):
SELECT syscolumns.name,systypes.name,syscolumns.isnullable,syscolumns.length FROM syscolumns, systypes WHERE syscolumns.xusertype = systypes.xusertype AND "syscolumns.id = object_id('tableName')
注意點:
(1)這裡為了重點突出某些重要內容,選取了其中幾項資訊輸出。
(2)syscolumns表中只含有資料類型編號,要擷取完整的名字需要從systypes表中找,一般使用者使用的資料類型用xusertype對應比較好,不會出現一對多的情況。
(3)syscolumns.length得到的是實體記憶體的長度,所以nvarchar和varchar等類型在資料庫中的顯示是這個的一半。
3、得到表中主鍵所包含的列名:
SELECT syscolumns.name FROM syscolumns,sysobjects,sysindexes,sysindexkeys WHERE syscolumns.id = object_id('tablename') AND sysobjects.xtype = 'PK' AND sysobjects.parent_obj = syscolumns.id AND sysindexes.id = syscolumns.id AND sysobjects.name = sysindexes.name AND sysindexkeys.id = syscolumns.id AND sysindexkeys.indid = sysindexes.indid AND syscolumns.colid = sysindexkeys.colid
注意:這是在4張系統資料表中尋找的,關係比較複雜,大致可以表示為:
syscolumns中存有表中的列資訊和表id,sysobjects表中存有主鍵名字(即PK_Table類似)和表id,sysindexes中存有主鍵名字和表id和index編號,sysindexkeys中存有表id和index編號和列編號,一項一項對應起來後就能找到列名了,呼~