SQLServer中獲取所有數據庫名、所有表名、所有字段名的SQL語句


----1. 獲取所有的數據庫名-----
SELECT NAME FROM MASTER.DBO.SYSDATABASES ORDER BY NAME

-----2. 獲取所有的表名------
SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME
--XTYPE='U':表示所有用戶表;
--XTYPE='S':表示所有系統表;
SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U' AND SYSSTAT = '83'
----注意:一般情況只需要TYPE = 'U',但有時候會有系統表混在其中(不知道什么原因),加上后面一句后就能刪除這些系統表了。

----3.獲取所有字段名-----
SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('BCUSTOMER');

SELECT SYSCOLUMNS.NAME,SYSTYPES.NAME,SYSCOLUMNS.ISNULLABLE,SYSCOLUMNS.LENGTHFROM SYSCOLUMNS, SYSTYPES 
WHERE SYSCOLUMNS.XUSERTYPE = SYSTYPES.XUSERTYPE AND SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER');

/*注意點:
----(A)這里為了重點突出某些重要內容,選取了其中幾項信息輸出。
(B)SYSCOLUMNS表中只含有數據類型編號,要獲取完整的名字需要從SYSTYPES表中找,一般用戶使用的數據類型用XUSERTYPE對應比較好,不會出現一對多的情況。
(C)SYSCOLUMNS.LENGTH得到的是物理內存的長度,所以NVARCHAR和VARCHAR等類型在數據庫中的顯示是這個的一半。*/


----4、得到表中主鍵所包含的列名------
SELECT SYSCOLUMNS.NAME ,SYSOBJECTS.XTYPE
FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEXKEYS
WHERE SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER') 
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編號和列編號,
一項一項對應起來后就能找到列名了,呼~*/

----5、得到表中列的描述內容-----
'表示沒有找到'

SELECT A.NAME,G.VALUE 
FROM SYSCOLUMNS AS A 
LEFT JOIN SYSPROPERTIES G   
ON A.ID=G.ID 
AND A.COLID = G.SMALLID   
 WHERE A.ID='BCUSTOMER'

  

----1. 獲取所有的數據庫名-----
SELECT NAME FROM MASTER.DBO.SYSDATABASES ORDER BY NAME

-----2. 獲取所有的表名------
SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME
--XTYPE='U':表示所有用戶表;
--XTYPE='S':表示所有系統表;
SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U' AND SYSSTAT = '83'
----注意:一般情況只需要TYPE = 'U',但有時候會有系統表混在其中(不知道什么原因),加上后面一句后就能刪除這些系統表了。

----3.獲取所有字段名-----
SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('BCUSTOMER');

SELECT SYSCOLUMNS.NAME,SYSTYPES.NAME,SYSCOLUMNS.ISNULLABLE,SYSCOLUMNS.LENGTHFROM SYSCOLUMNS, SYSTYPES
WHERE SYSCOLUMNS.XUSERTYPE = SYSTYPES.XUSERTYPE AND SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER');

/*注意點:
----(A)這里為了重點突出某些重要內容,選取了其中幾項信息輸出。
(B)SYSCOLUMNS表中只含有數據類型編號,要獲取完整的名字需要從SYSTYPES表中找,一般用戶使用的數據類型用XUSERTYPE對應比較好,不會出現一對多的情況。
(C)SYSCOLUMNS.LENGTH得到的是物理內存的長度,所以NVARCHAR和VARCHAR等類型在數據庫中的顯示是這個的一半。*/


----4、得到表中主鍵所包含的列名------
SELECT SYSCOLUMNS.NAME ,SYSOBJECTS.XTYPE
FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEXKEYS
WHERE SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER')
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編號和列編號,
一項一項對應起來后就能找到列名了,呼~*/

----5、得到表中列的描述內容-----
'表示沒有找到'

SELECT A.NAME,G.VALUE
FROM SYSCOLUMNS AS A
LEFT JOIN SYSPROPERTIES G
ON A.ID=G.ID
AND A.COLID = G.SMALLID
WHERE A.ID='BCUSTOMER'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM