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_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 結構描述集合
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 12 月 12 日 |
|