如何获取SQL Server数据库元数据的方法
发布时间:2007.06.15 05:05 来源:赛迪网 作者:3946469 |
元数据简介 元数据 (metadata) 最常见的定义为“有关数据的结构数据”,或者再简单一点就是“关于数据的信息”,日常生活中的图例、图书馆目录卡和名片等都可以看作是元数据。在关系型数据库管理系统 (DBMS) 中,元数据描述了数据的结构和意义。比如在管理、维护 SQL Server 或者是开发数据库应用程序的时候,我们经常要获取一些涉及到数据库架构的信息: ◆某个数据库中的表和视图的个数以及名称; ◆某个表或者视图中列的个数以及每一列的名称、数据类型、长度、精度、描述等; ◆某个表上定义的约束; ◆某个表上定义的索引以及主键/外键的信息。 下面我们将介绍几种获取元数据的方法。 获取元数据 使用系统存储过程与系统函数访问元数据 获取元数据最常用的方法是使用 SQL Server 提供的系统存储过程与系统函数。 系统存储过程与系统函数在系统表和元数据之间提供了一个抽象层,使得我们不用直接查询系统表就能获得当前数据库对象的元数据。 常用的与元数据有关的系统存储过程有以下一些: 系统存储过程 ◆sp_columns 返回指定表或视图的列的详细信息。 ◆sp_databases 返回当前服务器上的所有数据库的基本信息。 ◆sp_fkeys 若参数为带有主键的表,则返回包含指向该表的外键的所有表;若参数为带有外键的表名,则返回所有同过主键/外键关系与该外键相关联的所有表。 ◆sp_pkeys 返回指定表的主键信息。 ◆sp_server_info 返回当前服务器的各种特性及其对应取值。 ◆sp_sproc_columns 返回指定存储过程的的输入、输出参数的信息。 ◆sp_statistics 返回指定的表或索引视图上的所有索引以及统计的信息。 ◆sp_stored_procedures 返回当前数据库的存储过程列表,包含系统存储过程。 ◆sp_tables 返回当前数据库的所有表和视图,包含系统表。 常用的与元数据有关的系统函数有以下一些: 系统函数 ◆COLUMNPROPERTY 返回有关列或过程参数的信息,如是否允许空值,是否为计算列等。 ◆COL_LENGTH 返回指定数据库的指定属性值,如是否处于只读模式等。 ◆DATABASEPROPERTYEX 返回指定数据库的指定选项或属性的当前设置,如数据库的状态、恢复模型等。 ◆OBJECT_ID 返回指定数据库对象名的标识号 ◆OBJECT_NAME 返回指定数据库对象标识号的对象名。 ◆OBJECTPROPERTY 返回指定数据库对象标识号的有关信息,如是否为表,是否为约束等。 ◆fn_listextendedproperty 返回数据库对象的扩展属性值,如对象描述、格式规则、输入掩码等。 由于我们无法直接利用到存储过程与函数的返回结果,因此只有在我们关心的只是查询的结果,而不需要进一步利用这些结果的时候,我们会使用系统存储过程与系统函数来查询元数据。 例如,如果要获得当前服务器上所有数据库的基本信息,我们可以在查询分析器里面运行: <ccid_nobr>
在返回结果中我们可以看到数据库的名称、大小及备注等信息。 但是如果要引用这部分信息,或者存储这部分信息以供后面使用,那么我们必须借助中间表来完成这个操作: <ccid_nobr>
使用信息架构视图访问元数据 信息架构视图基于 SQL-92 标准中针对架构视图的定义,这些视图独立于系统表,提供了关于 SQL Server 元数据的内部视图。信息架构视图的最大优点是,即使我们对系统表进行了重要的修改,应用程序也可以正常地使用这些视图进行访问。因此对于应用程序来说,只要是符合 SQL-92 标准的数据库系统,使用信息架构视图总是可以正常工作的。 信息架构视图 ◆INFORMATION_SCHEMA.CHECK_CONSTRAINTS:返回有关列或过程参数的信息,如是否允许空值,是否为计算列等。 ◆INFORMATION_SCHEMA.COLUMNS:返回当前数据库中当前用户可以访问的所有列及其基本信息。 ◆INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE:返回当前数据库中定义了约束的所有列及其约束名。 ◆INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE:返回当前数据库中定义了约束的所有表及其约束名。 ◆INFORMATION_SCHEMA.KEY_COLUMN_USAGE:返回当前数据库中作为主键/外键约束的所有列。 ◆INFORMATION_SCHEMA.SCHEMATA:返回当前用户具有权限的所有数据库及其基本信息。 ◆INFORMATION_SCHEMA.TABLES:返回当前用户具有权限的当前数据库中的所有表或者视图及其基本信息。 ◆INFORMATION_SCHEMA.VIEWS:返回当前数据库中的当前用户可以访问的视图及其所有者、定义等信息。 由于这些信息架构都是以视图的方式存在的,因此我们可以很方便地获得并利用需要的信息。 例如,我们要得到某个表有多少列,可以使用以下语句: SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mytable' 使用系统表访问元数据 虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL Server 将所有数据库对象的信息均存放在系统表中,作为 SQL Server 的管理、开发人员,了解各个系统表的作用将有助于我们了解 SQL Server 的内在工作原理。 SQL Server 的系统表非常多,其中最常用的与元数据查询有关的表有如下一些: syscolumns 存储每个表和视图中的每一列的信息以及存储过程中的每个参数的信息。 syscomments 存储包含每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的原始 SQL 文本语句。 sysconstraints 存储当前数据库中每一个约束的基本信息。 sysdatabases 存储当前服务器上每一个数据库的基本信息。 sysindexes 存储当前数据库中的每个索引的信息。 sysobjects 存储数据库内的每个对象(约束、默认值、日志、规则、存储过程等)的基本信息。 sysreferences 存储所有包括 FOREIGN KEY 约束的列。 systypes 存储系统提供的每种数据类型和用户定义数据类型的详细信息。 将系统存储过程、系统函数、信息架构视图与系统表结合使用,可以方便地让我们获得所有需要的元数据信息。 示例: 1、 获得当前数据库所有用户表的名称。 <ccid_nobr>
其中主要用到了系统表 sysobjects以及其属性 xtype,还有就是用到了 OBJECTPROPERTY 系统函数来判断是不是安装 SQL Server 的过程中创建的对象。 2、获得指定表上所有的索引名称。 <ccid_nobr>
综合实例 下面给出了一个存储过程,它的作用是自动将当前数据库的用户存储过程加密。 <ccid_nobr>
该存储过程利用了 sysobjects 和 syscomments 表,并巧妙地修改了原存储过程的 SQL 定义语句,将 AS 修改为了 WITH ENCRYPTION AS,从而达到了加密存储过程的目的。本存储过程在 SQL Server 2000 上通过。(责任编辑:王瑞) |
如何获取SQL Server数据库元数据的方法的更多相关文章
- C#将图片存放到SQL SERVER数据库中的方法
本文实例讲述了C#将图片存放到SQL SERVER数据库中的方法.分享给大家供大家参考.具体如下: 第一步: ? 1 2 3 4 5 6 7 8 9 10 //获取当前选择的图片 this.pictu ...
- [转]SQL SERVER数据库还原的方法
SQL SERVER数据库还原的方法 在SQL SERVER 2005下还原数据库 1.新建数据库A,右键还原数据库,此时目标数据库为A,选择备份 文件B_db_201311040200.BAK,还原 ...
- 访问内网中的sql server数据库的简便方法
前言: 有时候我们要访问局域网内的 sql server服务器,比如测试环境数据库在公司内网,回到家或在客户现场要连接内网中的数据库 第一步:假如可以连接局域网的数据库 192.168.150.129 ...
- 【.Net MVC4 connectionString设置】获取SQL server数据库的连接字符串
第一步:创建向导文件 在桌面创建一个txt文件,并将文件后缀改成“.udl”. 第二步:选择“提供程序”tab页 双击新创建的“.udl”文件,进入后选择“提供程序”tab页,选择“Micros ...
- 获取sql server数据库表结构
if exists (select 1 from sysobjects where name = 'sysproperties'and xtype = 'V')begin DROP VIEW s ...
- MS SQL SERVER 数据库日志压缩方法与代码
MS SQL性能是很不错的,但是数据库用了一段时间之后,数据库却变得很大,实际的数据量不大.一般都是数据库日志引起的!数据库日志的增长可以达到好几百M. DUMP TRANSACTION [数据库名] ...
- ADO.NET 获取SQL SERVER数据库架构信息
1.确定可用字段数目 sqlDataReader类提供了FieldCount属性,可确定查询反悔了多少个字段. 2.确定返回行的数目 sqlDataReader中没有指示可用行的属性. 3.确定字段的 ...
- 获取SQL Server数据库中的表和字段描述
获取所有dbo表的扩展属性: SELECT * FROM fn_listextendedproperty (NULL, 'schema', 'dbo', 'table', default, NULL, ...
- 获取SQL Server数据库表的列名
SELECT syscolumns.name,systypes.name,syscolumns.isnullable,syscolumns.length FROM syscolumns, systyp ...
随机推荐
- Apache-AB压力测试实例
一 AB背景介绍 Apache附带的压力测试工具apache bench--简称ab,非常容易使用,并且完全可以摸你各种条件对Web服务器发起测试请求.ab可以直接在Web服务器本地发起测试请求,这对 ...
- 《Python基础教程(第二版)》学习笔记 -> 第一章 基础知识
写笔记的原因:书也看了一遍,视频也看了,但总是感觉效果不好,一段时间忘记了,再看又觉得有心无力,都是PDF的书籍,打开了就没有心情了,上班一天了,回家看这些东西,真的没多大精力了,所以,我觉得还是把p ...
- Datatable转成Json方式两则
1, Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据 1.这里下载:http://www.newtonsoft.com/products/json/ ...
- eclipse 远程wifi调试android程序
[原文]http://leanote.com/blog/view/541f8b2dbda4e44f75000000 下载wifidebug http://pan.baidu.com/s/1i3stnF ...
- UVA1673 str2int(SAM)
[题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51267 [题意] 给定n个字符串,计算所有忽略前导0的子串形成 ...
- CodeForces 149D Coloring Brackets 区间DP
http://codeforces.com/problemset/problem/149/D 题意: 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2 ...
- leetcode@ [236] Lowest Common Ancestor of a Binary Tree(Tree)
https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ Given a binary tree, find the ...
- [转]带花树,Edmonds's matching algorithm,一般图最大匹配
看了两篇博客,觉得写得不错,便收藏之.. 首先是第一篇,转自某Final牛 带花树……其实这个算法很容易理解,但是实现起来非常奇葩(至少对我而言). 除了wiki和amber的程序我找到的资料看着都不 ...
- jqgrid单元格设置空值的方法
项目中使用jqgrid,在使用的场景下经常需要清空单元格内容,于是使用了下面的代码: $("#jqgrid1").jqGrid('setCell',rowId, 'column', ...
- lua string 库
--lua中字符串索引从前往后是1,2,……,从后往前是-1,-2……. --string库中所有的function都不会直接操作字符串,只返回一个结果. ---------------------- ...