MSSQL查詢資料庫表名、表的列名
1.獲取所有資料庫名:
(1)、Select Name FROM Master..SysDatabases order by Name
2.獲取所有表名:
(1)、Select Name FROM SysObjects Where XType='U' orDER BY Name
XType='U':表示所有使用者表;
XType='S':表示所有系統表;
(2)、SELECT name FROM sysobjects WHERE type = 'U' AND sysstat = '83'
注意:一般情況只需要type = 'U',但有時候會有系統表混在其中(不知道什麼原因),加上後面一句後就能刪除這些系統表了
3.獲取所有欄位名:
(1)、Select Name FROM SysColumns Where id=Object_Id('TableName')
(2)、SELECT syscolumns.name,systypes.name,syscolumns.isnullable,syscolumns.length FROM syscolumns, systypes WHERE syscolumns.xusertype = systypes.xusertype AND "syscolumns.id = object_id('tableName')
注意點:
(a)這裡為了重點突出某些重要內容,選取了其中幾項資訊輸出。
(b)syscolumns表中只含有資料型別編號,要獲取完整的名字需要從systypes表中找,一般使用者使用的資料型別用xusertype對應比較好,不會出現一對多的情況。
(c)syscolumns.length得到的是實體記憶體的長度,所以nvarchar和varchar等型別在
4、得到表中主鍵所包含的列名:
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編號和列編號,一項一項對應起來後就能找到列名了。
另外的SQL程式碼
select syscolumns.name, systypes.name, syscolumns.length from syscolumns
left join systypes on syscolumns. xusertype =systypes. xusertype
where id=(select id from sysobjects where name='訂貨主檔');
go;
或者用這樣的寫法,執行結果一樣:
select syscolumns.name, systypes.name, syscolumns.length from syscolumns,systypes
where (syscolumns.id=object_id('訂貨主檔') and syscolumns.xusertype=systypes.xusertype)
order by syscolumns.colorder;
go
執行結果:(欄位只出現一次,正常)
訂單號碼 int 4
客戶編號 nvarchar 10
員工編號 int 4
訂單日期 datetime 8
要貨日期 datetime 8
送貨日期 datetime 8
送貨方式 int 4
運費 money 8
收貨人 nvarchar 80
送貨地址 nvarchar 120
送貨城市 nvarchar 30
送貨行政區 nvarchar 30
送貨郵政編碼 nvarchar 20
送貨國家地區 nvarchar 30
select syscolumns.name, systypes.name, syscolumns.length from syscolumns
left join systypes on syscolumns.xtype=systypes.xtype
where id=(select id from sysobjects where name='訂貨主檔');
go;
執行結果:(部分欄位出現兩次,資料型別不同)
訂單號碼 int 4
客戶編號 nvarchar 10
客戶編號 sysname 10
員工編號 int 4
訂單日期 datetime 8
訂單日期 出生日期型別 8
要貨日期 datetime 8
要貨日期 出生日期型別 8
送貨日期 datetime 8
送貨日期 出生日期型別 8
送貨方式 int 4
運費 money 8
運費 薪水型別 8
收貨人 nvarchar 80
收貨人 sysname 80
送貨地址 nvarchar 120
送貨地址 sysname 120
送貨城市 nvarchar 30
送貨城市 sysname 30
送貨行政區 nvarchar 30
送貨行政區 sysname 30
送貨郵政編碼 nvarchar 20
送貨郵政編碼 sysname 20
送貨國家地區 nvarchar 30
送貨國家地區 sysname 30
查詢儲存過程DepartmentSalaryInfo所有的資訊,資訊包含在系統檢視syscolumns,systypes中
select syscolumns.*, systypes.* from syscolumns
left join systypes on syscolumns.xusertype=systypes.xusertype
where id=(select id from sysobjects where name='DepartmentSalaryInfo');
go
exec sp_procedure_params_rowset @procedure_name = 'DepartmentSalaryInfo';
go
執行結果:
北風貿易 dbo DepartmentSalaryInfo;1 @RETURN_VALUE 0 4 0 NULL 0 3 NULL NULL 10 NULL NULL int int
北風貿易 dbo DepartmentSalaryInfo;1 @department 1 1 0 NULL 1 129 10 10 NULL NULL NULL varchar varchar
北風貿易 dbo DepartmentSalaryInfo;1 @average 2 2 0 NULL 1 6 NULL NULL 19 NULL NULL money money
北風貿易 dbo DepartmentSalaryInfo;1 @maximum 3 2 0 NULL 1 6 NULL NULL 19 NULL NULL money money
北風貿易 dbo DepartmentSalaryInfo;1 @minimum 4 2 0 NULL 1 6 NULL NULL 19 NULL NULL money money
--儲存過程中的引數名,引數型別,引數長度
select syscolumns.name, systypes.name, syscolumns.length from syscolumns
left join systypes on syscolumns.xusertype=systypes.xusertype
where id=(select id from sysobjects where name='DepartmentSalaryInfo');
1:獲取當前資料庫中的所有使用者表 select Name from sysobjects where xtype='u' and status>=0 2:獲取某一個表的所有欄位 select name from syscolumns where id=object_id('表名') 3:查詢使用者建立的所有資料庫 select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa') 或者 select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01 4:查詢某一個表的欄位和資料型別 select column_name,data_type from information_schema.columns where table_name = '表名' [n].[標題]: Select * From TableName Order By CustomerName [n].[標題]: 8.如何修改資料庫的名稱: sp_renamedb 'old_name', 'new_name' 9.只複製一個表結構,不復制資料 select top 0 * into [t1] from [t2] 10.連線遠端資料庫 select * from OPENDATASOURCE('SQLOLEDB','Data Source=遠端ip;User ID=sa;Password=密碼').庫名.dbo.表名 11.獲取當前oracle資料庫中的所有表 select table_name from user_tables 12 .獲取當前oracle表中所有欄位的型別 SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,NULLABLE FROM USER_TAB_COLS where TABLE_NAME='teacher'; 查詢資料庫儲存量大小 (Master) DECLARE @tablespaceinfo TABLE ( nameinfo varchar(50), rowsinfo int, reserved varchar(20), datainfo varchar(20), index_size varchar(20), unused varchar(20) ) DECLARE @tablename varchar(255); DECLARE Info_cursor CURSOR FOR SELECT [name] FROM sys.tables WHERE type='U'; OPEN Info_cursor FETCH NEXT FROM Info_cursor INTO @tablename WHILE @@FETCH_STATUS = 0 BEGIN insert into @tablespaceinfo exec sp_spaceused @tablename FETCH NEXT FROM Info_cursor INTO @tablename END CLOSE Info_cursor DEALLOCATE Info_cursor SELECT * FROM @tablespaceinfo ORDER BY Cast(Replace(reserved,'KB','') as INT) DESC |