SQL Server的以前版本在跟蹤對象相關性方面做的並不好原因是所有的對象相關性都是由對象ID來跟蹤的這意味著對象一開始就必須存在但是通過根據對象名稱來跟蹤對象SQL Server 極大地擴展了跟蹤對象的能力而不用再依賴ID該方法的好處是在一些對象已經從數據庫中轉移出去後還可以繼續跟蹤對象甚至在對象沒有建立時也可以進行跟蹤
新管理對象
SQL Server 引進了兩個新動態管理函數和新系統視圖用於跟蹤對象相關性這兩個新對象包括Database Engine存儲的有關相關性的信息這些相關性是在創建更改和放棄對象時建立的在一個對象以名稱的形式出現於存儲在另一個對象中的SQL表達式中時一個相關性就會在兩個對象之間創建在表達式中出現的對象稱為被引用實體而包含SQL表達式的對象稱為引用實體
syssql_expression_dependencies
本視圖含有當前數據庫中用戶定義的一個對象的每個相關性的一個記錄這些用戶定義的對象可以是存儲在當前數據庫中的對象或者存儲在不同數據庫中並利用部分命名規則(databasenameschemanameobjectname)被引用的對象在不同的服務器上並使用四部分命名規則(servernamedatabasenameschemanameobjectname)通過鏈接服務器被引用的對象以及在特定對象創建時不存在的對象(稱為延遲對象)
sysdm_sql_referenced_entities
用戶在定義特定引用實體時本函數為通過名稱引用的每個用戶定義的對象返回一個行例如如果視圖vw_SampleView引用表Table 的Field Field和 Field則將返回四行針對被引用字段返回三行針對表引用返回一行
sysdm_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
)
在下邊的腳本中創建了名稱為dbousp_GetSales的存儲的過程該過程引用在以上腳本中創建的SalesHistory表
CREATE PROCEDURE dbousp_GetSales
(
@Product VARCHAR()
)
AS
BEGIN
SELECT COUNT(SaleID) AS SalesCount SUM(SalePrice) AS SalesAmount
FROM dboSalesHistory sh
END
[] []
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22442.html