亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

使用SQL Server 2008服務器中的對象相關性

添加時間:2014-3-28 14:37:38  添加: 思海網絡 

  在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

   下邊的腳本使用表值函型數sys.dm_sql_referenced_returns尋找所有引用SalesHistory表的對象。這一查詢不但返 回SalesHistory表的引用,還包含被引用的SalesHistory表中的字段。值得注意的是CROSS APPLY操作符的使用,這是因為實體是表值型函數,而且在將字段值賦予表值型函數時需要APPLY操作符。還要注意,如果遇到引用一個不存在的實體字 段, 對sys.dm_referenced_entities函數的調用會出錯:      SELECT ReferencedEntityName = o.name, g.referenced_entity_name, referenced_minor_name
  FROM sys.objects o
  JOIN sys.schemas s on o.schema_id = s.schema_id
  CROSS APPLY sys.dm_sql_referenced_entities(s.name + '.' + o.name, 'OBJECT') g
  WHERE referenced_entity_name = 'SalesHistory'

  在下邊的腳本中,創建了一個新的名稱為usp_GetSalesFromArchive的存儲的過程,該過程引用不存在的SalesHistoryArchive 表

   CREATE PROCEDURE usp_GetSalesFromArchive
  (
  @Product VARCHAR(10)
  )
  AS
  BEGIN
  SELECT COUNT(SaleArchiveID) AS SalesCount, SUM(SaleArchivePrice) AS SalesAmount
  FROM dbo.SalesHistoryArchive sh
  END

  現在可以利用 sys.sql_expression_dependencies系統視圖尋找引用SalesHistoryArchive 表的任何對象。

  或者,可以稍微改變該查詢來尋找存儲的過程usp_GetSalesFromArchive引用的表.

   SELECT ReferencingObject = o.name ,
  ReferencedObject = d.referenced_entity_name
  FROM sys.sql_expression_dependencies d
  join sys.objects o on d.referencing_id = o.object_id
  WHERE o.name = 'usp_GetSalesFromArchive'

  通過對象名稱而不是對象ID跟蹤相關性擁有諸多好處。用戶可能喜歡尋找存儲的過程,該過程引用并不存在的對象,因為這幫助用戶尋找不再使用或需要更新的任何存儲的過程。

關鍵字:Server、存儲、數據庫

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站