在SQL Server 2008中物件相關性的使用

iSQlServer發表於2009-01-12
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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-536520/,如需轉載,請註明出處,否則將追究法律責任。

相關文章