好贷网好贷款

SQL Server 2005:向系统表说再见 100xuejiecn]

发布时间:2016-12-3 6:13:46 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"SQL Server 2005:向系统表说再见 100xuejiecn]",主要涉及到SQL Server 2005:向系统表说再见 100xuejiecn]方面的内容,对于SQL Server 2005:向系统表说再见 100xuejiecn]感兴趣的同学可以参考一下。

非技术版, 以后每天发一帖了。其他的改发技术方面的东东了。 感觉上面问的问题,有很多都是重复的。另外的问题是很多是设计的问题,却费尽心思怎么实现,而不是有比较好的方式解决问题。比如,一个人有病,什么病不知道,却只知道治,只能治标不治本。因此,看到一些好的东东会发到论坛上面,希望对大家有所启发。 特此声明:本帖来源于网络,只是为了大家学习方便,无意侵权,非本人之作每篇都将附上原地址。 原帖地址(略有删节): http://database.ctocio.com.cn/298/9052298.shtml 微软的SQL Server 数据库管理员 ,快快想一下!在不使用任何的文档的情况下,编写一个查询,从SQL Server 2000系统表中抽取索引的列表,然后列举每个索引中的字段,并判断这个字段是否按照升序或者降序进行排序。你有两分钟的时间。快!   如果你现在真的停下阅读,开始用必不可少的两分钟时间思考这项不讨好的任务,那么现在你就陷入了一个大麻烦中,这里面涉及了系统索引、系统索引关键字,系统字段,以及一些元数据函数,其中包括类似OBJECT_NAME 和INDEXKEY_PROPERTY这样的备用信息。到现在为止,要编写这样的一个查询很明显要花费远远超过2分钟的时间了。   不幸的SQL Server 2000数据库管理员们,需要浏览深奥的系统表,这是这项使用数据库管理系统的工作中最糟糕的一部分。系统表,通常是有效率的,但是在我的印象里,它可从来不是为了用户友好设计的。   幸运的是,眼前就有了救星。在SQL Server 2005中,系统表不见了。是的。不见了。再也不需要对陌生的位进行操作,也不需要找出神秘的编码方案——这在过去都是必需的。对于你们中间需要对遗留下来的参考这些表的人来说,我知道你在想什么:无休止的机械的升级以保障与SQL Server 2005的兼容。 那么这些表去了哪里呢?SQL Server 2005中的系统数据现在存储在隐藏的“资源”表中,这个表只能被服务器自身直接访问。低级用户(和数据库管理员)必须使用新的一系列的分类视图,这些视图显示了从各种我们看不到也不能调用的隐藏表和各种隐藏函数中获得的数据。以前版本的SQL Server 中的系统表现在作为一系列所谓的(也相当正确的)“兼容视图”的形式实现。   分类视图和它们的伙伴,动态管理视图(下面进行解释),代表了一种处理元数据的方式,这些元数据是完全重新设计和重新思考出来的。没有了那些只会给数据库管理员一些底层数据的微小感觉的神秘的表,现在的SQL Server提供了丰富的资源:SQL Server 2005中有超过200个分类和管理视图,取代了以前版本中大约50个的系统表。   所有这些视图都可以在系统计划中找到。(计划是在SQL Server 2005中大大扩展了的安全特性。但是这是另一篇贴士的话题。)要看到可用视图的完全列表,SQL Server Management Studio扩展了所有数据库的系统视图树。或者通过T-SQL 从视图自身选择一个列表,并找出友好的易于理解的名字:   SELECT name   FROM sys.all_views   WHERE is_ms_shipped = 1   你还会发现再也不需要通过浏览文档来查找有关做某件关系系统数据的事情的线索。这些视图都有很明确的自我解释。   有关视图名字的一些线索如下:那些前缀是dm_的是动态管理视图,通过类似当前会话、锁,以及系统资源的信息表示服务器的正在改变的状态。其他的视图都可以认为是分类视图。那些前缀是all_的包含了有关系统对象(例如视图)和用户定义的对象的信息。那些没有all_前缀的只包含了用户定义的对象的信息。在那些包括了系统对象的视图中,is_ms_shipping字段可用于区分用户定义对象和系统对象。如果is_ms_shipped字段的值为1,则这一行代表了一个系统对象,否则,就是用户定义的对象。   最后,让我们检查一些你可以从分类视图中获得数据类型。对于初学者,所有常见的内容都可以获得。例如:查看索引中的数据,使用 sys.indexes,而不是原先的sysindexes——奇怪的是,现在称之为sys.sysindexes。对于约束,试试 sys.check_constraints, sys.default_constraints, 或者 sys.key_constraints。看出这个趋势了吗?   这篇贴士哪怕是没有简单的提到一句有关新的动态管理视图的话,都是不完整的。这些视图是SQL Server存储新的元数据的强有力的工具,它们可以帮助数据库管理员快速解决问题并分析服务器的性能。其中的一些明星选手,包括 sys.dm_exec_query_stats,用来报告查询要求了多少个处理器时间;以及sys.dm_db_index_usage_stats,用来帮助数据库管理员决定哪一个索引是最有用的,哪些是没有用的。

http://database.ctocio.com.cn/imagelist/2009/216/5h02873riy8d.gif

先顶再学习

看看 

.

.

..

why

可以预见,以后的MSSQL版本里,象sysobjects之类的对象可能就不能用了,改为sys.objects等,但内容和sysobjects差不多,所以目前仅 个名称的问题。 记得在2000时,帮助里写检索元数据,最好用information_schema.tables等视图,因为系统表可能会改变的。 在05里,系统表里就没东西了。但在视图中,有系统视图一项,里面挺多的。应该是MS的一个策略吧。禁止对系统核心表访问和改变,只用视图提供接口,估计是从安全性方面考虑。 但在08的帮助里面说,sys.视图(称为系统架构)里字段也可能会发生改变。。。 估计是刚刚开始,还不够固定吧。 理论上MS应该保持这些接口不变。

对于没有进行硬编码以便与特定的表和视图集一起工作的动态应用程序,它必须具有一种机制用于确定任何与之相连的数据库中对象的结构和属性。这些应用程序可能需要如下信息: 数据库中表和视图的数目和名称。 表或视图中的列数以及每一列的名称、数据类型、小数位数和精度。 为表定义的约束。 为表定义的索引和键。 系统目录可为 SQL Server 数据库提供此信息。SQL Server 系统目录的核心是一个视图集,这些视图显示了描述 SQL Server 实例中的对象的元数据。元数据是描述系统中对象属性的数据。基于 SQL Server 的应用程序可以使用以下方式访问系统目录中的信息: 目录视图。建议使用这种访问方法。 信息架构视图。 OLE DB 架构行集。 ODBC 目录函数。 系统存储过程和函数。

学习!

目录视图 通过这些目录视图可以访问服务器上各数据库中存储的元数据。 注意:  目录视图不提供对复制、SQL Server 代理或备份元数据的访问。 建议使用目录视图访问元数据,原因如下: 所有元数据都作为目录视图提供。 目录视图以一种独立于所有目录表实现的格式来表示元数据,因此,不受基础目录表变化的影响。 目录视图是访问核心服务器元数据的最有效的方式。 目录视图是目录元数据的常规界面,提供了获取、转换以及表示此自定义形式的元数据的最直接的方式。 目录视图名称和它们的列名称是说明性的。查询结果将与具备该功能(与正被查询的元数据相对应)中等知识的用户期望一致。 例如,以下查询使用 sys.objects 目录视图来返回在最近 10 天内修改过的所有数据库对象。 SELECT name AS object_name    ,SCHEMA_NAME(schema_id) AS schema_name   ,type_desc   ,create_date   ,modify_date FROM sys.objects WHERE modify_date > GETDATE() - 10 ORDER BY modify_date;   在 SQL Server 的未来版本中,Microsoft 可能会通过在列列表的末尾添加列来扩充任何系统目录视图的定义。我们建议不要在生产代码中使用语法 SELECT * FROM sys.catalog_view_name,这是因为返回的列数可能会更改并破坏应用程序的运行。 信息架构视图 信息架构视图基于的是 ISO 标准中的目录视图定义。它们以一种独立于所有目录表实现的格式来表示目录信息,因此不受基础目录表变化的影响。使用这些视图的应用程序可在符合 ISO 标准的异类数据库系统之间移植。 信息架构视图不包含 SQL Server 2008 特有的元数据。 兼容性视图 许多 SQL Server 早期版本中的系统表现在都实现为视图集。这些视图称为兼容性视图,它们仅用于向后兼容。它们显示的元数据与 SQL Server 2000 中提供的相同。但是,它们不显示与 SQL Server 2005 及更高版本中引入的功能关联的任何元数据。因此,当使用新功能(例如,Service Broker 或分区)时,必须切换至使用目录视图。这是升级至目录视图的一个充分原因。升级至目录视图的另外一个原因是存储用户 ID 和类型 ID 的兼容性视图列可能返回 NULL 或触发器算术溢出。这是因为在 SQL Server 2005 及更高版本中可以创建超过 32,767 个用户和数据类型。例如,如果您要创建 32,768 个用户,然后运行查询 SELECT * FROM sys.sysusers;并且 ARITHABORT 设置为 ON,则查询将因算术溢出错误而失败。如果 ARITHABORT 设置为 OFF,uid 列将返回 NULL。 为避免出现这些问题,建议升级到使用可以处理增加的用户 ID 和类型 ID 数量的新目录视图。 系统存储过程和函数 Transact-SQL 定义了返回目录信息的服务器系统存储过程和系统函数。虽然这些存储过程和函数为 SQL Server 所特有,但它们使用户与基础系统目录表的结构隔离开了。

学习

以上是联机 帮助上的内容,还有常见的问题。 如: 如何找到视图的定义?  如何找到最近 n 天内修改过的所有实体?  如何找到指定表的主键列?  如何找到指定表的外键列?  等,建议大家没事的时候看看联机帮助吧,很有帮助的。

继续学习

学习 

学习 

.

上一篇:一条insert 语句 5gaishishengzhu1314]
下一篇:刚下了MS SQL 2005 准备装,但已近有 MS SQL2000 了,升级还是删除再装? 20yindeyan]

相关文章

相关评论