求几个问题的答案

I_am_Z 2012-05-03 08:43:10
小弟最近在做一个项目,其中涉及到两处技术实现,之前没有做过。
分别是:(该案中使用的数据库是sqlserver2005)

A)如何通过数据查询得到数据库中表对象,或试图对象的清单

B)如何在已知表对象名的前提下,查询得到该表的表结构清单
...全文
132 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
99归一 2012-05-03
  • 打赏
  • 举报
回复

--查询用户表对象信息
SELECT Tab.Name AS [表名],
Tab.create_date AS [创建时间],
Tab.modify_date AS [最后修改时间],
Col.Name AS [列名],
Type.name AS [数据类型],
Col.max_length AS [字段长度],
CASE
WHEN pk.is_primary_key = 1 THEN 'Y'
ELSE 'N'
END AS [是否主键],
CASE
WHEN Col.is_identity = 1 THEN 'Y'
ELSE 'N'
END AS [是否自增],
identity_columns.seed_value AS [自增种子],
identity_columns.increment_value AS [自增步长],
CASE
WHEN Col.is_nullable = 1 THEN 'Y'
ELSE 'N'
END AS [是否允许为NULL],
Def.text AS [默认值],
CASE
WHEN Col.is_computed = 1 THEN 'Y'
ELSE 'N'
END AS [是否计算列],
computed_columns.definition AS [计算公式],
Col_Desc.Value AS [列备注]
FROM sys.objects Tab
INNER JOIN sys.columns Col
ON Tab.object_id = Col.object_id
INNER JOIN sys.types Type
ON Col.system_type_id = Type.system_type_id
LEFT JOIN sys.identity_columns identity_columns
ON Tab.object_id = identity_columns.object_id
AND Col.column_id = identity_columns.column_id
LEFT JOIN syscomments Def
ON Col.default_object_id = Def.ID
LEFT JOIN(SELECT index_columns.object_id,
index_columns.column_id,
indexes.is_primary_key
FROM sys.indexes indexes
INNER JOIN sys.index_columns index_columns
ON indexes.object_id = index_columns.object_id
AND indexes.index_id = index_columns.index_id
WHERE indexes.is_primary_key = 1/*主键*/
) PK
ON Tab.object_id = PK.object_id
AND Col.column_id = PK.column_id
LEFT JOIN sys.computed_columns computed_columns
ON Tab.object_id = computed_columns.object_id
AND Col.column_id = computed_columns.column_id
LEFT JOIN sys.extended_properties Col_Desc
ON Col_Desc.major_id = Tab.object_id
AND Col_Desc.minor_id = Col.Column_id
AND Col_Desc.class = 1
WHERE Tab.type = 'U'
AND Tab.Name NOT LIKE'sys%'
ORDER BY Tab.create_date

IT-Style 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

1.获取所有数据库名:
SELECT Name FROM Master..SysDatabases ORDER BY Name
2.获取所有表名:
SELECT Name FROM DatabaseName..SysObjects Where XType='U' ORDER BY Name
XType='U':表示所有用户表;
XType='S':表示所有系统表;
3.获……
[/Quote]
++
I_am_Z 2012-05-03
  • 打赏
  • 举报
回复
我擦,没想到,各位大侠,太给力了,其实2楼楼长【嘿嘿】已经给我搞定了,大家还这么人情,这么多题外的拓展回帖,看完,搞得小弟我是热泪盈眶啊,再次感谢大家,分上少了,不能表达我此时对各位的感激之情,再次,跪谢大家,谢谢了!
nightgoblin 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
A查询系统试图
比如查询用户表
SELECT NAME FROM SYS.TABLES
视图
SELECT * FROM sys.views
B也是查询系统视图
SYS.COLUMNS,SYS.TABLES,SYS.types
等联结查询就可以,具体系统试图看联机帮助
[/Quote]
2楼正解,我还补充一下系统视图用途:
sysaltfiles 主数据库 保存数据库的文件
syscharsets 主数据库字符集与排序顺序

sysconfigures 主数据库 配置选项

syscurconfigs 主数据库当前配置选项

sysdatabases 主数据库服务器中的数据库

syslanguages 主数据库语言

syslogins 主数据库 登陆帐号信息

sysoledbusers 主数据库 链接服务器登陆信息

sysprocesses 主数据库进程

sysremotelogins主数据库 远程登录帐号

syscolumns 每个数据库 列

sysconstrains 每个数据库 限制

sysfilegroups 每个数据库 文件组

sysfiles 每个数据库 文件

sysforeignkeys 每个数据库 外部关键字

sysindexs 每个数据库 索引

sysmenbers 每个数据库角色成员

sysobjects 每个数据库所有数据库对象

syspermissions 每个数据库 权限

systypes 每个数据库 用户定义数据类型

sysusers 每个数据库 用户

  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

A查询系统试图
比如查询用户表
SELECT NAME FROM SYS.TABLES
视图
SELECT * FROM sys.views
B也是查询系统视图
SYS.COLUMNS,SYS.TABLES,SYS.types
等联结查询就可以,具体系统试图看联机帮助
[/Quote]

膜拜一下
ABCDEF 2012-05-03
  • 打赏
  • 举报
回复
sys.objects
simonxt 2012-05-03
  • 打赏
  • 举报
回复
1.获取所有数据库名:
SELECT Name FROM Master..SysDatabases ORDER BY Name
2.获取所有表名:
SELECT Name FROM DatabaseName..SysObjects Where XType='U' ORDER BY Name
XType='U':表示所有用户表;
XType='S':表示所有系统表;
3.获取所有字段名:
SELECT Name FROM SysColumns WHERE id=Object_Id('TableName')
快溜 2012-05-03
  • 打赏
  • 举报
回复
sys.objects
I_am_Z 2012-05-03
  • 打赏
  • 举报
回复
好的,我研究下。
昵称被占用了 2012-05-03
  • 打赏
  • 举报
回复
A查询系统试图
比如查询用户表
SELECT NAME FROM SYS.TABLES
视图
SELECT * FROM sys.views
B也是查询系统视图
SYS.COLUMNS,SYS.TABLES,SYS.types
等联结查询就可以,具体系统试图看联机帮助

fornothing 2012-05-03
  • 打赏
  • 举报
回复
SELECT * FROM SYS.TABLES
三五月儿 2012-05-03
  • 打赏
  • 举报
回复
select * from sys.tables;
select * from sys.views;
作者:July、阿财。 时间:二零一一年十月十三日。 ------------------------------ 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试 全部100题答案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July 的人在一个叫csdn 的论坛上开帖分享微软等公司数据结构+算法 面试100题,自此,与上千网友一起做,一起思考,一起解答这些面试题目,最终成就了一个名为:结构之法 算法之道的编程面试与算法研究并重的博客,如今,此博客影响力逐步渗透到海外,及至到整个互联网。 在此之前,由于本人笨拙,这微软面试100题的答案只整理到了前60题(第1-60题答案可到本人资源下 载处下载:http://v_july_v.download.csdn.net/),故此,常有朋友留言或来信询问后面40题的答案。只是 因个人认为:一、答案只是作为一个参考,不可太过依赖;二、常常因一些事情耽搁(如在整理最新的今年 九月、十月份的面试题:九月腾讯,创新工场,淘宝等公司最新面试十三题、十月百度,阿里巴巴,迅雷搜狗 最新面试十一题);三、个人正在针对那100题一题一题的写文章,多种思路,不断优化,即成程序员编程 艺术系列。自此,后面40题的答案迟迟未得整理。且个人已经整理的前60题的答案,在我看来,是有诸多问 题与弊端的,甚至很多答案都是错误的。 互联网总是能给人带来惊喜。前几日,一位现居美国加州的名叫阿财的朋友发来一封邮件,并把他自己 做的全部100题的答案一并发予给我,自此,便似遇见了知己。十分感谢。 任何东西只有分享出来才更显其价值。本只需贴出后面40题的答案,因为前60题的答案本人早已整理上 传至网上,但多一种思路多一种参考亦未尝不可。特此,把阿财的答案再稍加整理番,然后把全部100题的答 案现今都贴出来。若有任何问题,欢迎不吝指正。谢谢。 上千上万的人都关注过此100题,且大都都各自贡献了自己的思路,或回复于微软100题维护地址上,或 回复于本博客内,人数众多,无法一一标明,特此向他们诸位表示敬意和感谢。谢谢大家,诸君的努力足以影 响整个互联网,咱们已经迎来一个分享互利的新时代。 感谢诸君,请享用.....

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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