SQL获取所有数据库名、表名、储存过程以及参数

系统 1613 0
原文: 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 所有的信息,信息包含在系统视图 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';

SQL获取所有数据库名、表名、储存过程以及参数列表


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论