垂询使用对象 使用SQL Server 2008中对象相关性[1]
使用SQL Server 2008中对象相关性[1]
SQL Server的以前版本在跟踪对象相关性方面做的并不好 原因是所有的对象相关性都是由对象ID来跟踪的 这意味着对象一开始就必须存在 但是 通过根据对象名称来跟踪对象SQL Server 极大地扩展了跟踪对象的能力 而不用再依赖ID 该方法的好处是在一些对象已经从数据库中转移出去后 还可以继续跟踪对象 甚至在对象没有建立时也可以进行跟踪
新管理对象
SQL Server 引进了两个新动态管理函数和新系统视图 用于跟踪对象相关性 这两个新对象包括Database Engine存储的有关相关性的信息 这些相关性是在创建 更改和放弃对象时建立的 在一个对象以名称的形式出现于存储在另一个对象中的SQL表达式中时 一个相关性就会在两个对象之间创建 在表达式中出现的对象称为被引用实体 而包含SQL表达式的对象称为引用实体
sys sql_expression_dependencies
本视图含有当前数据库中用户定义的一个对象的每个相关性的一个记录 这些用户定义的对象可以是存储在当前数据库中的对象 或者存储在不同数据库中并利用部分命名规则(databasename schemaname objectname)被引用的对象 在不同的服务器上并使用四部分命名规则(servername databasename schemaname objectname)通过链接服务器被引用的对象 以及在特定对象创建时不存在的对象(称为延迟对象)
sys dm_sql_referenced_entities
用户在定义特定引用实体时 本函数为通过名称引用的每个用户定义的对象返回一个行 例如 如果视图vw_SampleView引用表Table 的Field Field 和 Field 则将返回四行 针对被引用字段返回三行 针对表引用返回一行
sys dm_sql_referencing_entities
该函数为用户在当前数据库中定义的每个对象返回一个记录 这些对象通过名称引用另一个用户定义的对象 例如 如果视图vw_SampleView引用Table 和 Table 则该函数返回两个记录 针对每个表引用返回一个记录
举例
以下示例显示了如何通过创建一些对象和查询新DMV在数据库内部跟踪相关性 利用下边的脚本创建名称为SalesHistory的表
CREATE TABLE [dbo] [SalesHistory]( [SaleID] [int] IDENTITY( ) NOT NULL PRIMARY KEY CLUSTERED
[Product] [char]( ) NULL
[SaleDate] [datetime] NULL
[SalePrice] [money] NULL
)
在下边的脚本中 创建了名称为dbo usp_GetSales的存储的过程 该过程引用在以上脚本中创建的SalesHistory表
CREATE PROCEDURE dbo usp_GetSales (
@Product VARCHAR( )
)
AS
BEGIN
SELECT COUNT(SaleID) AS SalesCount SUM(SalePrice) AS SalesAmount
![垂询使用对象 使用SQL Server 2008中对象相关性[1]](http://img.zhputi.com/uploads/16a7/16a7a493ebe314a4cff25653c4a8520610850.jpg)
FROM dbo SalesHistory sh
END
lishixinzhi/Article/program/SQLServer/201311/22442