数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

使用SQL Server 2008中对象相关性[2]


发布日期:2018年06月21日
 
使用SQL Server 2008中对象相关性[2]

下边的脚本使用表值函型数sysdm_sql_referenced_returns寻找所有引用SalesHistory表的对象这一查询不但返回SalesHistory表的引用还包含被引用的SalesHistory表中的字段值得注意的是CROSS APPLY操作符的使用这是因为实体是表值型函数而且在将字段值赋予表值型函数时需要APPLY操作符还要注意如果遇到引用一个不存在的实体字段 对sysdm_referenced_entities函数的调用会出错

SELECT ReferencedEntityName = oname greferenced_entity_name referenced_minor_name

FROM sysobjects o

JOIN sysschemas s on oschema_id = sschema_id

CROSS APPLY sysdm_sql_referenced_entities(sname + + oname OBJECT) g

WHERE referenced_entity_name = SalesHistory

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

CREATE PROCEDURE usp_GetSalesFromArchive

(

@Product VARCHAR()

)

AS

BEGIN

SELECT COUNT(SaleArchiveID) AS SalesCount SUM(SaleArchivePrice) AS SalesAmount

FROM dboSalesHistoryArchive sh

END

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

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

SELECT ReferencingObject = oname

ReferencedObject = dreferenced_entity_name

FROM syssql_expression_dependencies d

join sysobjects o on dreferencing_id = oobject_id

WHERE oname = usp_GetSalesFromArchive

结论

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

[] []

               

上一篇:向外扩展SQL Server系统的两个选项

下一篇:使用SQL Server 2008中对象相关性[1]