sys.sql_dependencies (Transact-SQL)

更新: 2006 年 12 月 12 日

依照定義某個其他參考 (相依) 物件的 SQL 運算式或陳述式所參考,針對所參考 (獨立) 之實體的每個相依性,各包含一個資料列。sys.sql_dependencies 檢視是用以追蹤實體之間依名稱的相依性。在 sys.sql_dependencies 的每個資料列中,所參考的實體將依名稱顯示在參考物件的保存 SQL 運算式中。此外,如果參考物件有結構描述繫結的運算式,就會強制相依性。如需詳細資訊,請參閱<瞭解 SQL 相依性>。

資料行名稱 資料類型 描述

class

tinyint

識別所參考 (獨立) 之實體的類別:

0 = 物件或資料行 (只限於非結構描述繫結參考)

1 = 物件或資料行 (結構描述繫結參考)

2 = 類型 (結構描述繫結參考)

3 = XML 結構描述集合 (結構描述繫結參考)

4 = 資料分割函數 (結構描述繫結參考)

class_desc

nvarchar(60)

所參考 (獨立) 之實體的類別描述:

  • OBJECT_OR_COLUMN_REFERENCE_NON_SCHEMA_BOUND
  • OBJECT_OR_COLUMN_REFERENCE_SCHEMA_BOUND
  • TYPE_REFERENCE
  • XML_SCHEMA_COLLECTION_REFERENCE
  • PARTITION_FUNCTION_REFERENCE

object_id

int

參考 (相依) 實體的識別碼。

column_id

int

如果相依識別碼是資料行,便是參考 (相依) 資料行的識別碼;否則便是 0。

referenced_major_id

int

所參考 (獨立) 之實體的識別碼,由類別值來解譯,依據如下:

0、1 = 物件或資料行的物件識別碼。

2 = 類型識別碼。

3 = XML 結構描述集合識別碼。

referenced_minor_id

int

所參考 (獨立) 之實體的次要識別碼,由類別值來解譯,顯示如下。

當類別 =:

0, referenced_minor_id 是資料行識別碼;如果不是資料行,它便是 0。

1, referenced_minor_id 是資料行識別碼;如果不是資料行,它便是 0。

否則,referenced_minor_id = 0。

is_selected

bit

選取物件或資料行。

is_updated

bit

更新物件或資料行。

is_select_all

bit

在 SELECT * 陳述式中使用物件 (只限物件層級)。

備註

只有在建立參考 (相依) 物件時,所參考 (獨立) 之實體存在,才會在 CREATE 期間建立相依性。由於延遲名稱解析,所參考的實體在建立時不需要存在。在這個情況下,不會建立相依性資料列。另外,利用動態 SQL 來參考的實體也不會建立相依性。

如果利用 DROP 來卸除所參考 (獨立) 的實體,便會自動刪除相依性資料列。若要重建相依性資料列,您必須依照正確的相依順序,利用 CREATE 來重建這兩者。

物件會追蹤結構描述繫結和非結構描述繫結相依性。CHECK 條件約束、預設值和計算資料行參考都是隱含的結構描述繫結。只有結構描述繫結相依性會追蹤類型、XML 結構描述集合和資料分割函數的相依性。在 SQL Server 2005 Service Pack 1 及更舊版本中,Transact-SQL 函數或 程序中定義的參數都以隱含方式進行結構描述繫結。因此,您可以使用 sys.sql_dependencies 目錄檢視來檢視相依於 CLR 使用者自訂類型別名XML 結構描述集合的參數。不過,這也表示這些物件無法重新命名。在 SQL Server 2005 Service Pack 2 中,只有當 Transact-SQL 模組是使用結構描述繫結建立時,相依於這些物件的參數才會在目錄檢視中追蹤。雖然在模組 (非結構描述繫結) 中當做參數使用的 CLR 使用者自訂類型、別名或 XML 結構描述集合可重新命名,但是您可能必須使用 sp_refreshsqlmodule 來重新整理該模組的定義。

範例

A. 尋找指定之函數的相依性

下列範例會傳回指定之函數的相依性。在您執行下列查詢之前,請使用有效的名稱取代 <database_name><schema_name.function_name>

USE <database_name>;
GO
SELECT OBJECT_NAME(object_id) AS referencing_object_name
    ,COALESCE(COL_NAME(object_id, column_id), '(n/a)') AS referencing_column_name
    ,*
FROM sys.sql_dependencies
WHERE referenced_major_id = OBJECT_ID('<schema_name.function_name>')
ORDER BY OBJECT_NAME(object_id), COL_NAME(object_id, column_id);
GO 

B. 尋找相依於指定之 CLR 使用者自訂類型的 CHECK 條件約束

在您執行下列查詢之前,請使用有效的名稱來取代 <database_name>,並使用符合結構描述的有效 CLR 使用者自訂類型名稱來取代 <schema_name.data_type_name>

USE <database_name>;
GO
SELECT SCHEMA_NAME(o.schema_id) AS schema_name
    ,OBJECT_NAME(o.parent_object_id) AS table_name
    ,OBJECT_NAME(o.object_id) AS constraint_name
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o ON o.object_id = d.object_id
WHERE referenced_major_id = TYPE_ID('<schema_name.data_type_name>')
    AND class = 2 -- schema-bound references to type
    AND OBJECTPROPERTY(o.object_id, 'IsCheckCnst') = 1; -- exclude non-CHECK dependencies
GO

C. 尋找相依於指定之 CLR 使用者自訂類型或別名類型的檢視、Transact-SQL 函數和 Transact-SQL 預存程序

下列查詢會針對指定的 CLR 使用者自訂類型或別名類型,傳回其檢視、Transact-SQL 函數及 Transact-SQL 預存程序中的所有結構描述繫結相依性。

USE <database_name>;
GO
SELECT SCHEMA_NAME(o.schema_id) AS dependent_object_schema
  ,OBJECT_NAME(o.object_id) AS dependent_object_name
  ,o.type_desc AS dependent_object_type
  ,d.class_desc AS kind_of_dependency
  ,TYPE_NAME (d.referenced_major_id) AS type_name
FROM sys.sql_dependencies AS d 
JOIN sys.objects AS o
  ON d.object_id = o.object_id
  AND o.type IN ('FN','IF','TF', 'V', 'P')
WHERE d.class = 2 -- dependencies on types
  AND d.referenced_major_id = TYPE_ID('<schema_name.data_type_name>')
ORDER BY dependent_object_schema, dependent_object_name;
GO

請參閱

參考

目錄檢視 (Transact-SQL)
物件目錄檢視 (Transact-SQL)
sp_rename (Transact-SQL)
sp_refreshsqlmodule (Transact-SQL)

其他資源

實作使用者自訂類型
瞭解 SQL 相依性
查詢 SQL Server 系統目錄 FAQ
管理伺服器上的 XML 結構描述集合

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 新增有關使用者自訂類型、別名和 XML 結構描述集合在 Transact-SQL 模組中宣告成參數時這些物件相依性的資訊。
  • 新增<範例>一節。