熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

使用SQL Server 2008中對象相關性[2]

2013-11-15 14:51:28  來源: SQL Server 

  下邊的腳本使用表值函型數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跟蹤相關性擁有諸多好處用戶可能喜歡尋找存儲的過程該過程引用並不存在的對象因為這幫助用戶尋找不再使用或需要更新的任何存儲的過程

[]  []  


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22443.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.