使用SQL Server 2008中对象相关性

SQL Server的以前版本在跟踪对象相关性方面做的并不好。原因是所有的对象相关性都是由对象ID来跟踪的,这意味着对象一开始就必须存在。但是,通过根据对象名称来跟踪对象SQL Server 2008极大地扩展了跟踪对象的能力,而不用再依赖ID。该方法的好处是在一些对象已经从数据库中转移出去后,还可以继续跟踪对象,甚至在对象没有建立时也可以进行跟踪。

新管理对象

SQL Server 2008引进了两个新动态管理函数和新系统视图,用于跟踪对象相关性。这两个新对象包括Database Engine存储的有关相关性的信息,这些相关性是在创建、更改和放弃对象时建立的。在一个对象以名称的形式出现于存储在另一个对象中的SQL表达式中时,一个相关性就会在两个对象之间创建。在表达式中出现的对象称为被引用实体,而包含SQL表达式的对象称为引用实体。

sys.sql_expression_dependencies

本视图含有当前数据库中用户定义的一个对象的每个相关性的一个记录。这些用户定义的对象可以是存储在当前数据库中的对象,或者存储在不同数据库中并利用部分命名规则(databasename.schemaname.objectname)被引用的对象,在不同的服务器上并使用四部分命名规则(servername.databasename.schemaname.objectname)通过链接服务器被引用的对象,以及在特定对象创建时不存在的对象(称为延迟对象)。

sys.dm_sql_referenced_entities

用户在定义特定引用实体时,本函数为通过名称引用的每个用户定义的对象返回一个行,例如,如果视图vw_SampleView引用表Table1 的Field1、 Field2和 Field3,则将返回四行,针对被引用字段返回三行,针对表引用返回一行。

sys.dm_sql_referencing_entities

该函数为用户在当前数据库中定义的每个对象返回一个记录,这些对象通过名称引用另一个用户定义的对象。例如,如果视图vw_SampleView引用Table1 和 Table2,则该函数返回两个记录,针对每个表引用返回一个记录。

举例

以下示例显示了如何通过创建一些对象和查询新DMV在数据库内部跟踪相关性。利用下边的脚本创建名称为SalesHistory的表:

CREATE TABLE [dbo].[SalesHistory](
[SaleID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
[Product] [char](150) NULL,
[SaleDate] [datetime] NULL,
[SalePrice] [money] NULL
)

在下边的脚本中,创建了名称为dbo.usp_GetSales的存储的过程,该过程引用在以上脚本中创建的SalesHistory表:CREATE PROCEDURE dbo.usp_GetSales
(
@Product VARCHAR(10)
)
AS
BEGIN
SELECT COUNT(SaleID) AS SalesCount, SUM(SalePrice) AS SalesAmount
FROM dbo.SalesHistory sh
END

下边的脚本使用表值函型数sys.dm_sql_referenced_returns寻找所有引用SalesHistory表的对象。这一查询不但返回SalesHistory表的引用,还包含被引用的SalesHistory表中的字段。值得注意的是CROSS APPLY操作符的使用,这是因为实体是表值型函数,而且在将字段值赋予表值型函数时需要APPLY操作符。还要注意,如果遇到引用一个不存在的实体字段, 对sys.dm_referenced_entities函数的调用会出错:   SELECT ReferencedEntityName = o.name, g.referenced_entity_name, referenced_minor_name
FROM sys.objects o
JOIN sys.schemas s on o.schema_id = s.schema_id
CROSS APPLY sys.dm_sql_referenced_entities(s.name + '.' + o.name, 'OBJECT') g
WHERE referenced_entity_name = 'SalesHistory'

在下边的脚本中,创建了一个新的名称为usp_GetSalesFromArchive的存储的过程,该过程引用不存在的SalesHistoryArchive 表

CREATE PROCEDURE usp_GetSalesFromArchive
(
@Product VARCHAR(10)
)
AS
BEGIN
SELECT COUNT(SaleArchiveID) AS SalesCount, SUM(SaleArchivePrice) AS SalesAmount
FROM dbo.SalesHistoryArchive sh
END

现在可以利用 sys.sql_expression_dependencies系统视图寻找引用SalesHistoryArchive 表的任何对象。

或者,可以稍微改变该查询来寻找存储的过程usp_GetSalesFromArchive引用的表.

SELECT ReferencingObject = o.name ,
ReferencedObject = d.referenced_entity_name
FROM sys.sql_expression_dependencies d
join sys.objects o on d.referencing_id = o.object_id
WHERE o.name = 'usp_GetSalesFromArchive'

结论

通过对象名称而不是对象ID跟踪相关性拥有诸多好处。用户可能喜欢寻找存储的过程,该过程引用并不存在的对象,因为这帮助用户寻找不再使用或需要更新的任何存储的过程。

时间: 2025-01-31 09:09:11

使用SQL Server 2008中对象相关性的相关文章

SQL Server 2008中的数据压缩功能

SQL Server 2005 SP2为我们带来了vardecimal功能,这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储,据称这项功能可以为典型的数据仓库节省30%的空间,而SQL Server 2008在这一基础上又进一步增强了数据压缩功能.SQL Server 2008现在支持行压缩和页面压缩两种选项,数据压缩选项可以在以下对象上启用: 未创建聚簇索引的表 创建聚簇索引的表 非聚簇索引(对表设置压缩选项不会影响到该表上的非聚簇索引,因此聚簇索引的压缩需要单独设置)

SQL Server 2008中这样订阅策略组

SQL Server 2005 SP2为我们带来了vardecimal功能,这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储,据称这项功能可以为典型的数据仓库节省30%的空间,而SQL Server 2008在这一基础上又进一步增强了数据压缩功能.SQL Server 2008现在支持行压缩和页面压缩两种选项,数据压缩选项可以在以下对象上启用: 未创建聚簇索引的表 创建聚簇索引的表 非聚簇索引(对表设置压缩选项不会影响到该表上的非聚簇索引,因此聚簇索引的压缩需要单独设置)

SQL Server 2008中的数据表压缩功能详细介绍_mssql2008

SQL Server 2005 SP2为我们带来了vardecimal功能,当时针对decimail和numeric数据类型推出了新的存储格式--vardecimal.vardecimal存储格式允许 decimal和numeric数据类型的存储作为一个可变长度列. 这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储,据称这项功能可以为典型的数据仓库节省30%的空间,而SQL Server 2008在这一基础上又进一步增强了数据压缩功能.SQL Server 2008现在支持

SQL Server 2008中的代码安全(三) 通过PassPhrase加密_mssql2008

前言:       在SQL Server 2005和SQL Server 2008之前.如果希望加密敏感数据,如财务信息.工资或身份证号,必须借助外部应用程序或算法.SQL Server 2005引入内建数据加密的能力,使用证书.密钥和系统函数的组合来完成.     与数字证书类似.SQL Server 证书包括公钥和私钥这一对密钥,它们都用来加密和解密数据.SQL Server也拥有创建非对称密钥和对称密钥对象的能力.非对称密钥(asymmetric key)与证书相似,公钥用来加密数据库,

SQL Server 2008中多实例的评估和执行策略

问题提出 了解了SQL Server 2008中的管理策略之后,我们想在SQL Server 2008以及SQL Server 2005中的多实例上执行这些策略.请就如何实现给出详细的解答,谢谢. 专家解答 SQL Server 2008中,当一个实例被创建后,就可以对之进行评估.但数据库管理员需要做一项非常繁琐的工作:SQL Server中所管理的每一个实例都需要逐个执行这些策略.数据库管理员做的最多的工作应该是在产品正式运行前的测试环境中不断地改变执行的策略.然而很多人都并不想逐个逐个的导入

SQL Server 2008中不推荐及不支持的功能

每个人都在等着Microsoft SQL Server 2008的新功能出现,不过我们首先应该知道有哪些"不 推荐(deprecated)"以及"不支持(Discontinued)"的功能."不推荐"的 功能是指那些在旧版SQL Server中出现,但是将会在SQL Server的未来版本中不再推荐使用的功能,并且 在今后的版本中将会去除这些功能."不支持"的功能是指那些不会在SQL Server 2008中出 现的功能.在迁

SQL Server 2008中的联机事务处理

导言 在过去的20年数据库得到了普遍使用,并迅速发展.存储和技术成本的降低导致大量地存储数据和数据库的急剧扩大.由于这个简单有效的技术,内嵌的数据库和许多产品应运而生,并使得公司可以存储更多的数据,并保持更久的时间,所以公司想合并他们的服务器. SQL Server 2008专注于四个关键领域来满足现今的OLTP数据库需求: · 可扩展性和性能.SQL Server 2008使得公司可以建立具有现今的应用程序所要求的性能和扩展能力的数据库解决方案. · 高有效性.SQL Server 2008提

SQL Server 2008中有关XML的新功能

1 导言 Microsoft 在Microsoft SQL Server 2000中推出了与XML相关的功能以及Transact-SQL 关键字FOR XML和OPENXML ,这使得开发人员可以编写Transact-SQL代码来获取XML流形式的查询结果,并将一个XML 文档分割成一个rowset.SQL Server 2005显著的扩展了这些XML功能,推出了一个支持XSD schema验证. 基于XQuery的操作和XML索引的本地的xml 数据类型.SQL Server 2008建立在之

在SQL Server 2008中使用空间数据实现位置智能

1. 导言 现今的信息工作人员和消费者处理大量不同类型的信息,从电子表格和数据库中的商业数据的传统数 据表,到在线的基于媒体的数据例如视频.照片和音乐.近来朝向mash up解决方案(mash up解决方案是 指合并从多个来源获得的信息和内容来创建通用的在线应用程序)发展的趋势表明计算机用户使用高度集 成的解决方案来利用它们可用的大量信息. 同时,技术优势导致地理服务和设备的发展,包括在线绘制地图解决方案,例如Microsoft Virtual Earth,和较便宜的全球定位系统(GPS)解决方