获取SQL Server元数据方法
元数据简介
元数据 (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 返回指定数据库对象标识号的有关信息,如是否为表,是否为约束等。
相关文档:
语句及查询结果:
SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 1): 05/16/06
SELECT CONVERT(varchar(100), GETDATE(), 2): 06.05.16
SELECT CONVERT(varchar(100), GETDATE(), 3): 16/05/06
SELECT CONVERT(varchar(100), GETDATE(), 4): 16.05.06
SE ......
CREATE FUNCTION StringToBarcode
(@Value Varchar(50) )
RETURNS NVarchar(100)
AS
BEGIN
Declare @charCount int
Declare @charPos int, @minCharPos int
declare @currentChar int, @checksum int
Declare @isTableB int,@isValid int
&n ......
一个示例死锁
让我们从这样一个示例开始说起,它在 SQL Server 2000 和 2005 中都能引起死锁。在本文中,我使用 SQL Server 2005 的最新 CTP(社区技术预览,Community Technology Preview)版本,SQL Server 2005 Beta 2(7 月发布)也同样适用。如果您没有 Beta 2 或最新的 CTP 版本,请下载 SQL Server 2005 Express 的 ......
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Collections;
using System.Data.SqlClient;
/// <summary>
/// 数据库的通用访问代码
/// 此类为抽象类,不允许实例化,在应用时直接调用即可
/// </summary>
public ab ......