惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyberwarzone
Cyberwarzone
Recent Announcements
Recent Announcements
D
DataBreaches.Net
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 聂微东
博客园 - 【当耐特】
aimingoo的专栏
aimingoo的专栏
N
Netflix TechBlog - Medium
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
L
LangChain Blog
The Cloudflare Blog
Y
Y Combinator Blog
AI
AI
P
Palo Alto Networks Blog
美团技术团队
有赞技术团队
有赞技术团队
I
Intezer
Last Week in AI
Last Week in AI
Know Your Adversary
Know Your Adversary
D
Darknet – Hacking Tools, Hacker News & Cyber Security
NISL@THU
NISL@THU
博客园 - 三生石上(FineUI控件)
MongoDB | Blog
MongoDB | Blog
S
Schneier on Security
IT之家
IT之家
博客园 - 司徒正美
A
Arctic Wolf
罗磊的独立博客
雷峰网
雷峰网
Vercel News
Vercel News
SecWiki News
SecWiki News
AWS News Blog
AWS News Blog
GbyAI
GbyAI
WordPress大学
WordPress大学
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Tor Project blog
V
Vulnerabilities – Threatpost
Hugging Face - Blog
Hugging Face - Blog
H
Heimdal Security Blog
Schneier on Security
Schneier on Security
H
Help Net Security
T
Troy Hunt's Blog
N
News and Events Feed by Topic
爱范儿
爱范儿
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero
T
The Exploit Database - CXSecurity.com

博客园 - 阳春三月

工作态度两则 泛型小经验 【转载】看图测性格 【转载】乔海燕-外科医生的手术技巧 记念 33-101 使用 MyMeta 组件获取数据库结构 看博客园文章的一点感想 事件与委托有别, delegate 与 Delegate 相异 - 阳春三月 伟大的 PL/Sql Developer——数据库结构比较 新年礼物:推荐小工具 C#属性的实质还是方法 abstract、virtual、override 和 new 在 IE 中承载 Winform 应用程序 安装 VS2008 SP1 后需要给 TFS2008 装 SP1 更新下载程序集缓存 尼康 P5100 的几张片子 吃油饼的男人 Linq error: Sequence contains no elements TFS 问题两则
获取 SQL Server 2005 中的元数据
阳春三月 · 2009-03-09 · via 博客园 - 阳春三月

    从一直在 Oracle 上做工作转到用 SQL Server,有些使用习惯还转不过来,最明显的就是习惯了键盘敲命令,现在得用鼠标双击拖拽窗口,比如以前一个“desc” 命令就可以列出表的结构,现在得鼠标左键右键点选半天才能看到。虽说图形管理界面简单直观易上手,但对我来说,还是喜欢命令行,喜欢脚本操作。

    不过喜欢归喜欢,新东西该学还得学,该适应还得适应。从 Oracle 的经验知道,所有的数据库操作都可以用 sql 脚本完成,大到建一个数据库,小到改一个字段的值,sql 无所不能。MS SQL Server 2005 中 SQL Server Management Studio 的出现,其易用性更上一层楼,但对 sql 命令的支持却也是毫不含糊的。上面提到的 desc 功能,可以用如下 sql 语句实现: 

    SELECT * FROM INFORMATION_SCHEMA.COLUMNS where table_name='表名'

    这句话里面的“INFORMATION_SCHEMA.COLUMNS”是个“信息架构视图”,可以获取表的列信息,类似的视图还有INFORMATION_SCHEMA.Tables、INFORMATION_SCHEMA.Views、INFORMATION_SCHEMA.Schema 等等,分别能获取有关表、视图和架构的信息。信息架构视图是 SQL Server 2005 提供的几种获取元数据的方法之一。

    获取数据库的元数据信息在基于关系数据库的信息管理系统中是经常用到的功能,在 Oracle 中可以从系统预定义的所谓“字典表”或“字典视图”获取,比如“user_tab_columns”、“user_all_tables”等。上面我们说信息架构视图是 SQL Server 2005 提供的几种获取元数据的方法之一,那肯定还有别的方法,别的方法有哪些呢?

    查 MSDN 知,SQL Server 数据库中对象的结构和属性信息由 SQL Server 2005 系统目录提供。SQL Server 2005 系统目录的核心是一个视图集,这些视图显示了描述 SQL Server 实例中的对象的元数据。基于 SQL Server 的应用程序可以使用以下方式访问系统目录中的信息: 

    目录视图。建议使用这种访问方法。

    信息架构视图。

    OLE DB 架构行集。

    ODBC 目录函数。

    系统存储过程和函数。

    看,方法还不少呢!这些方法都有自己特定的使用环境和使用方法,比如:微软推荐使用的目录视图,内容最全最有效,DBA 用 SQL Server Management Studio 管理数据库时目录视图肯定是最常用的,而信息架构视图符合 SQL-92 标准,适合在异类数据库系统之间移植的应用;目录视图的名称都是以“sys.”前缀,信息架构视图必须以“INFORMATION_SCHEMA.”前缀等。

    目录视图的内容非常多,MSDN 中列出的包括 CLR 程序集目录视图、对象目录视图、数据库和文件目录视图等 16 个。而且视图间还有继承关系,像 sys.objects 是个基本视图,sys.tables、sys.columns 都是派生自 sys.objects 的派生视图。派生视图相比基本视图包含了更多的列,但因为是限制在某一方面的信息,所以行数一般要比基本视图少。另外,我们看到有些资料里获取列名查的是 syscolumns,注意这个“syscolumns”跟“sys.columns”还是有点儿区别的,syscolumns 是 SQL Server 2000 里的系统表,在 SQL Server 2005 里其功能已由 sys.columns 代替,但为保证向后兼容,SQL Server 2005 提供了自动将 SQL Server 2000 系统表映射到系统视图的功能。

    了解常用的系统目录表或系统字典,对学好 SQL Server 或 Oracle 这种大型 RDBMS 还是很有必要的,因为从这些表或视图中我们可以看出数据库后台的一些存储逻辑和管理机制,能帮助我们更深刻透彻地理解数据库,同时对提高数据库管理及开发的效率也都大有裨益。

    两种不同的 RDBMS 对比学习,把在一种 RDBMS 上已有的经验用于另一种,也许行得通,这是业内的通行做法;也许行不通,对这行不通的要仔细研究其差异,从机制上找到新的解决办法,然后由点及线,及面。所以说,对比学习也是种利用既有经验提高学习效率的好方法。