讀數據庫所有表和表結構的sql語句了(mssql)


SQL獲取所有數據庫名、表名、儲存過程以及參數列表

1.獲取所有用戶名:
SELECT name FROM Sysusers where status='2' and islogin='1'
islogin='1'表示帳戶
islogin='0'表示角色
status='2'表示用戶帳戶
status='0'表示糸統帳戶
2.獲取所有數據庫名:
SELECT Name FROM Master..SysDatabases ORDER BY Name
3.獲取所有表名
SELECT Name FROM DatabaseName..SysObjects Where XType='U' ORDER BY Name
XType='U':表示所有用戶表;
XType='S':表示所有系統表;
4.獲取所有字段名:
SELECT Name FROM SysColumns WHERE id=Object_Id('TableName')
5.獲取數據庫所有類型
select name from systypes 
6.獲取主鍵字段
SELECT  name FROM SysColumns WHERE id=Object_Id('表名') and colid=(select top 1 keyno from sysindexkeys where id=Object_Id('表名'))


[綜合網絡資料整理]

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所有的信息,信息包含在系統視圖syscolumnssystypes

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'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章