8535.com-新浦京娱乐场官网|欢迎您

赢得SQL Server数据库元数据的二种艺术

来源:http://www.dnamique.com 作者:计算机网络 人气:93 发布时间:2020-03-14
摘要:元数据简要介绍 元数据 (metadata卡塔尔国最何奇之有的概念为“有关数据的构造数据”,大概再轻易一点正是“关于数据的新闻”,常常生活中的图例、体育场合目录卡和名片等都得以

元数据简要介绍

元数据 (metadata卡塔尔国最何奇之有的概念为“有关数据的构造数据”,大概再轻易一点正是“关于数据的新闻”,常常生活中的图例、体育场合目录卡和名片等都得以作为是元数据。在关系型数据库管理系统 (DBMSState of Qatar 中,元数据描述了数码的结构和意义。譬喻在管理、维护 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 再次来到数据库对象的扩充属性值,如目的描述、格式准则、输入掩码等。

是因为大家鞭不如腹直接使用到存款和储蓄进度与函数的归来结果,由此独有在我们关怀的只是询问的结果,而不须要越来越利用这么些结果的时候,我们会采纳系统存储进程与系统函数来查询元数据。

比如,假设要获得当前服务器上有着数据库的核心信息,大家得以在询问深入分析器里面运维:

EXEC sp_databasesGO

在回来结果中我们得以见到数据库的名号、大小及备注等音信。

而是假设要援引那有的音讯,只怕存储这一部分新闻以供后边使用,那么我们必须依靠中间表来完毕那一个操作:

CREATE TABLE #sp_result(DATABASE_NAME sysname,DATABASE_SIZE int,REMARKS varchar(254) NULL)GOINSERT INTO #sp_resultEXEC ('sp_databases')GO

接纳新闻构造视图访谈元数据

消息结构视图基于 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、 取得当前数据库全部客商表的名号。

SELECT OBJECT_NAME (id)FROM sysobjectsWHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0

当中最首要使用了系统表 sysobjects以致其属性 xtype,还大概有就算运用了 OBJECTPROPERTY 系统函数来剖断是还是不是设置 SQL Server 的长河中开创的靶子。

2、获得钦定表上全部的目录名称。

SELECT name FROM sysindexesWHERE id = OBJECT_ID ('mytable') AND indid 0

归结实例

上边给出了叁个积存进程,它的功能是活动将眼下数据库的客商存款和储蓄进度加密。

DECLARE @sp_name nvarchar(400)DECLARE @sp_content nvarchar(2000)DECLARE @asbegin intdeclare @now datetimeselect @now = getdate()DECLARE sp_cursor CURSOR FORSELECT object_name(id)FROM sysobjectsWHERE xtype = 'P'AND type = 'P'AND crdate  @nowAND OBJECTPROPERTY(id, 'IsMSShipped')=0OPEN sp_cursorFETCH NEXT FROM sp_cursorINTO @sp_nameWHILE @@FETCH_STATUS = 0BEGINSELECT @sp_content = text FROMsyscomments WHERE id = OBJECT_ID(@sp_name)SELECT @asbegin =PATINDEX ( '%AS' + char(13) + '%', @sp_content)SELECT @sp_content =SUBSTRING(@sp_content, 1, @asbegin - 1)+ ' WITH ENCRYPTION AS'+ SUBSTRING (@sp_content, @asbegin+2, LEN(@sp_content))SELECT @sp_name = 'DROP PROCEDURE [' + @sp_name + ']'EXEC sp_executesql @sp_nameEXEC sp_executesql @sp_contentFETCH NEXT FROM sp_cursorINTO @sp_nameENDCLOSE sp_cursorDEALLOCATE sp_cursor

该存款和储蓄进度使用了 sysobjects 和 syscomments 表,并美妙地改正了原存款和储蓄进程的 SQL 定义语句,将 AS 修改为了 WITH ENC汉兰达YPTION AS,进而实现了加密存储进度的指标。本存款和储蓄进程在 SQL Server 2002 上通过。

本文由8535.com-新浦京娱乐场官网|欢迎您发布于计算机网络,转载请注明出处:赢得SQL Server数据库元数据的二种艺术

关键词:

上一篇:sql server Bulk Insert命令详细

下一篇:没有了

最火资讯