您的位置:首页 > 数据库

SQl查询数据库表名、表的列名

2016-01-27 11:42 369 查看

SQl查询数据库表名、表的列名

--读取库中的所有表名
select name from sysobjects where xtype='u'

--读取指定表的所有列名
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')
获取数据库表名和字段
sqlserver中各个系统表的作用
sysaltfiles 主数据库 保存数据库的文件
syscharsets 主数据库 字符集与排序顺序
sysconfigures 主数据库 配置选项
syscurconfigs 主数据库 当前配置选项
sysdatabases 主数据库 服务器中的数据库
syslanguages 主数据库 语言
syslogins 主数据库 登陆帐号信息
sysoledbusers 主数据库 链接服务器登陆信息
sysprocesses 主数据库 进程
sysremotelogins主数据库 远程登录帐号

syscolumns 每个数据库 列
sysconstrains 每个数据库 限制
sysfilegroups 每个数据库 文件组
sysfiles 每个数据库 文件
sysforeignkeys 每个数据库 外部关键字
sysindexs 每个数据库 索引
sysmenbers 每个数据库 角色成员
sysobjects 每个数据库 所有数据库对象
syspermissions 每个数据库 权限
systypes 每个数据库 用户定义数据类型
sysusers 每个数据库 用户

//
用什么方法可以得到一个表中所有的列名。SQl语句。
select 列名=name from syscolumns where id=object_id(N'要查的表名')

use gpStrudy
select name="name" from syscolumns where id=object_id(N'bookTable')
获得字段的属性
//这是从一段代码中考出来的,使用的是using System.Data.OleDb;
public int GetTableFields(String tableName,out String[] fields,out String[] fieldTypes)
...{
try
...{
OleDbCommand dc = m_OleDb.CreateCommand();//创建一个执行对象用于执行sql查询
dc.CommandText = "select * from " + tableName;
dc.Transaction = m_OleTrans;

OleDbDataReader dr = dc.ExecuteReader();//执行sql查询
//获取数据库的架构信息
DataTable schemaTable = dr.GetSchemaTable();

int fieldColumnCount = 0;

fields = new String[schemaTable.Rows.Count];
fieldTypes = new String[schemaTable.Rows.Count];

for(int i = 0;i < schemaTable.Columns.Count;i++)
...{
if(schemaTable.Columns.ColumnName.IndexOf("ColumnName") >= 0)
...{
//获取字段名称

for(int k = 0;k < schemaTable.Rows.Count;k++)
fields[k] = schemaTable.Rows[k].ItemArray.ToString();

fieldColumnCount++;
if(fieldColumnCount >= 2)
...{
dr.Close();
dc.Dispose();

dr = null;
dc = null;
return schemaTable.Rows.Count;
}
}
else if(schemaTable.Columns.ColumnName.IndexOf("DataType") >= 0)
...{
//获取字段类型

for(int k = 0;k < schemaTable.Rows.Count;k++)
fieldTypes[k] = schemaTable.Rows[k].ItemArray.ToString();

fieldColumnCount++;
if(fieldColumnCount >= 2)
...{
dr.Close();
dc.Dispose();

dr = null;
dc = null;
return schemaTable.Rows.Count;
}
}

}

dr.Close();
dc.Dispose();

dr = null;
dc = null;

return 0;

}
catch(Exception ee)
...{
fields = new String[1];
fieldTypes = new String[1];
m_ErrorString = "Ado_Application:GetTableFields:error:" + ee.Message;
return 0;
}
}

=============================================================================================

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 = '表名'

.[标题]:
Select * From TableName Order By CustomerName

.[标题]:
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';

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: