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

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

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
文章出处: http://www.diybl.com/course/7_databases/sql/msshl/2008515/116026.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值