怎样获得某个数据库的表信息和字段信息!!!!非常急!!!!!

freeantfly 2004-04-12 06:53:38
我想获得sql server中某个数据库的表信息(所有表的表名),及每个表的字段信息(字段名,类型,默认值,null属性,长度。。。。)
...全文
107 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
prcgolf 2004-04-14
  • 打赏
  • 举报
回复
多谢zjcxc(邹建)!!
netcoder 2004-04-14
  • 打赏
  • 举报
回复
凑个热闹:
1、所有数据库的信息保存在master数据库的sysdatabases表中,如果要查询所有用户数据库,使用
use master
go
select * from sysdatabases where name not in('master','model','msdb','tempdb','distribution')

方法二、使用系统存储过程sp_helpdb ,列出所有数据库
sp_helpdb
如果后面跟一数据库的名字,比如sp_helpdb pubs ,会列出该库的文件信息

2、一个用户数据库所有表的信息保存在该数据库的sysobjects表中,如果要查询该库所有用户表
方法一、

use 数据库名字
go
Select * from sysobjects where xtype = 'U' and status>0

方法二、使用系统存储过程sp_tables,列出所有表和视图(包括系统表和视图)

use 数据库名字
go
sp_tables

方法三、使用系统存储过程sp_help 列出表、视图的信息

use 数据库名字
go
sp_help

方法四、使用系统视图

use 数据库名字
go
select * from INFORMATION_SCHEMA.TABLES

3、一个数据库所有的列信息保存在该库syscolumns系统里,使用下面的语句查询
方法一、

use 数据库名字
go
Select a.id as ID, c.name as 表名, a.name as 列名 ,b.name as 类型, a.length as 长度, a.scale as Scale, a.isnullable as 允许空 from syscolumns a, systypes b, sysObjects c where a.xtype = b.xusertype and a.id = c.id and c.xtype='U' and c.status>0 order by a.colorder

方法二、使用系统视图

use 数据库名字
go
select * from information_schema.columns

另外:sp_help '表名',可以获取此表的表结构等信息
zjcxc 2004-04-14
  • 打赏
  • 举报
回复
你只是执行了下载回来的exe吧? 那个只是解压,你要到解压后的目录中执行:
setup.bat
zjcxc 2004-04-14
  • 打赏
  • 举报
回复
明明没装,还骗我已经装了
上面的结果很明白,版本号:8.00.194
装了sp3的版本号是:8.00.760
prcgolf 2004-04-14
  • 打赏
  • 举报
回复
to:zjcxc(邹建)
装了。
select @@version

Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug 6 2000 00:57:48 Copyright (c) 1988-2000 Microsoft Corporation Developer Edition on Windows NT 5.0 (Build 2195: Service Pack 3)


lycosadae 2004-04-13
  • 打赏
  • 举报
回复
up
whwenjz 2004-04-13
  • 打赏
  • 举报
回复
sp_help tablename
zjcxc 2004-04-13
  • 打赏
  • 举报
回复
发生什么错误? 注意那个在sql7.0中用不了
prcgolf 2004-04-13
  • 打赏
  • 举报
回复
我是在运行:
SELECT
表名=case when a.colorder=1 then d.name else '' end,
表说明=case when a.colorder=1 then isnull(f.value,'') else '' end,
字段序号=a.colorder,
字段名=a.name,
标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) then '√' else '' end,
类型=b.name,
占用字节数=a.length,
长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
允许空=case when a.isnullable=1 then '√'else '' end,
默认值=isnull(e.text,''),
字段说明=isnull(g.[value],''),
索引名称=isnull(h.索引名称,''),
索引顺序=isnull(h.排序,'')
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sysproperties g on a.id=g.id and a.colid=g.smallid
left join sysproperties f on d.id=f.id and f.smallid=0
left join(--这部分是索引信息,如果要显示索引与表及字段的对应关系,可以只要此部分
select 索引名称=a.name,c.id,d.colid
,排序=case indexkey_property(c.id,b.indid,b.keyno,'isdescending')
when 1 then '降序' when 0 then '升序' end
from sysindexes a
join sysindexkeys b on a.id=b.id and a.indid=b.indid
join (--这里的作用是有多个索引时,取索引号最小的那个
select id,colid,indid=min(indid) from sysindexkeys
group by id,colid) b1 on b.id=b1.id and b.colid=b1.colid and b.indid=b1.indid
join sysobjects c on b.id=c.id and c.xtype='U' and c.name<>'dtproperties'
join syscolumns d on b.id=d.id and b.colid=d.colid
where a.indid not in(0,255)
) h on a.id=h.id and a.colid=h.colid
--where d.name='要查询的表' --如果只查询指定表,加上此条件
order by a.id,a.colorder

时发生的错误。
为什么啊??
vbsbird 2004-04-13
  • 打赏
  • 举报
回复
zjcxc(邹建)

大哥,你在这里,上次的事谢谢你了,我好羡慕你们,不但水平很高而且爱帮助别人,代表人

向你致敬
prcgolf 2004-04-13
  • 打赏
  • 举报
回复
to:zjcxc(邹建)

ODBC: 消息 0,级别 19,状态 1
SqlDumpExceptionHandler: 进程 55 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION。SQL Server 将终止该进程。
forjzforjz 2004-04-13
  • 打赏
  • 举报
回复
to zjcxc(邹建)
收CSDN短信息
zjcxc 2004-04-13
  • 打赏
  • 举报
回复
装SQL补丁了吗?
prcgolf 2004-04-13
  • 打赏
  • 举报
回复
ODBC: 消息 0,级别 19,状态 1
SqlDumpExceptionHandler: 进程 55 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION。SQL Server 将终止该进程。
IbeFlying 2004-04-13
  • 打赏
  • 举报
回复
up
zjcxc 2004-04-12
  • 打赏
  • 举报
回复
--简单的就用这个

select case when c.colid=1 then object_name(c.id) else '' end as 表名
,c.name as 字段名
,t.name 数据类型
,c.prec as 长度
,p.value as 字段说明
,m.text as 默认值
from syscolumns c
inner join systypes t on c.xusertype=t.xusertype
left join sysproperties p on c.id=p.id and c.colid = p.smallid
left join syscomments m on c.cdefault=m.id
where objectproperty(c.id,'IsUserTable')=1
zjcxc 2004-04-12
  • 打赏
  • 举报
回复
SELECT
表名=case when a.colorder=1 then d.name else '' end,
表说明=case when a.colorder=1 then isnull(f.value,'') else '' end,
字段序号=a.colorder,
字段名=a.name,
标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) then '√' else '' end,
类型=b.name,
占用字节数=a.length,
长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
允许空=case when a.isnullable=1 then '√'else '' end,
默认值=isnull(e.text,''),
字段说明=isnull(g.[value],''),
索引名称=isnull(h.索引名称,''),
索引顺序=isnull(h.排序,'')
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sysproperties g on a.id=g.id and a.colid=g.smallid
left join sysproperties f on d.id=f.id and f.smallid=0
left join(--这部分是索引信息,如果要显示索引与表及字段的对应关系,可以只要此部分
select 索引名称=a.name,c.id,d.colid
,排序=case indexkey_property(c.id,b.indid,b.keyno,'isdescending')
when 1 then '降序' when 0 then '升序' end
from sysindexes a
join sysindexkeys b on a.id=b.id and a.indid=b.indid
join (--这里的作用是有多个索引时,取索引号最小的那个
select id,colid,indid=min(indid) from sysindexkeys
group by id,colid) b1 on b.id=b1.id and b.colid=b1.colid and b.indid=b1.indid
join sysobjects c on b.id=c.id and c.xtype='U' and c.name<>'dtproperties'
join syscolumns d on b.id=d.id and b.colid=d.colid
where a.indid not in(0,255)
) h on a.id=h.id and a.colid=h.colid
--where d.name='要查询的表' --如果只查询指定表,加上此条件
order by a.id,a.colorder
zheninchangjiang 2004-04-12
  • 打赏
  • 举报
回复
呵呵,这个全了
CrazyFor 2004-04-12
  • 打赏
  • 举报
回复
SELECT
(case when a.colorder=1 then d.name else '' end) N'表名',
a.colorder N'字段序号',
a.name N'字段名',
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) N'标识',
(case when (SELECT count(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = a.id) AND (name = a.name))))))) AND
(xtype = 'PK'))>0 then '√' else '' end) N'主键',
b.name N'类型',
a.length N'占用字节数',
COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'长度',
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小数位数',
(case when a.isnullable=1 then '√'else '' end) N'允许空',
isnull(e.text,'') N'默认值',
isnull(g.[value],'') AS N'字段说明'
--into ##tx

FROM syscolumns a left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sysproperties g
on a.id=g.id AND a.colid = g.smallid
order by object_name(a.id),a.colorder
ccmoon 2004-04-12
  • 打赏
  • 举报
回复
sp_help tablename

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧