sys.dm_SQL_referenced_entities (Transact-SQL)
Ad tanımında belirtilen başvuru varlıktarafından başvurulan her kullanıcı tanımlı varlık için bir satır döndürür.Bir kullanıcı tanımlı varlıkolarak adlandırılan iki varlık arasında bir bağımlılık oluşturulur başvurulan varlık, adı adlı başka bir kullanıcı tarafından tanımlanan varlık, kalıcı bir SQLifade olarak görüntülenen varlıkbaşvuran. Örneğin, bir saklı yordam belirtilen başvuru varlıkise, tablo, görünüm, kullanıcı tanımlı türler (UDTs) gibi saklı yordam başvurulan kullanıcı tanımlı tüm varlıkları bu işlev döndürür veya diğer saklı yordamlar.
Belirtilen başvuru varlıktarafından başvurulan varlıkları aşağıdaki türlerde rapor için bu dinamik yönetim işlevi kullanabilirsiniz:
Şemaya bağlı varlıklar
Olmayan şemaya bağlı varlıklar
Veritabanları arası ve sunucular arası varlıklar
Sütun -düzey bağımlılıkları şemaya bağlı ve olmayan-şemaya bağlı varlıklar
Kullanıcı tanımlı türler (diğer ad ve clr UDT)
xml şema koleksiyonları
Bölüm işlevler
Sözdizimi
sys.dm_sql_referenced_entities (
' [ schema_name. ] referencing_entity_name ' , ' <referencing_class> ' )
<referencing_class> ::=
{
OBJECT
| DATABASE_DDL_TRIGGER
| SERVER_DDL_TRIGGER
}
Bağımsız değişkenler
[ schema_name. ] referencing_entity_name
Başvuru varlıkaddır.schema_namebaşvuru sınıf NESNESİ olduğunda gereklidir.schema_name.referencing_entity_nameis nvarchar(517).
<referencing_class> :: = {nesne | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER}
Belirtilen sınıf varlıkbaşvuruyor.Yalnızca bir sınıf deyimbelirtilebilir.<referencing_class>is nvarchar(60).
Dönen Tablo
Sütun adı |
Veri türü |
Açıklama |
---|---|---|
referencing_minor_id |
int |
Başvuru varlık sütunolduğunda sütun kimliği; Aksi takdirde 0.Nullable değil. |
referenced_server_name |
sysname |
Başvurulan varlıksunucusunun adı. Bu sütun , geçerli bir dört ad belirterek yapılan sunucular arası bağımlılıkları için doldurulur.Çok parçalı adları hakkında daha fazla bilgi için bkz: Transact-SQL Sözdizimi Kuralları (Transact-SQL). null olmayan-şemaya bağlı bağımlılıkları kendisi için dört adı belirtilmeden varlık başvuruldu. Aynı veritabanında olmalıdır ve bu nedenle yalnızca iki parçalı kullanılarak tanımlanabilir çünkü şemaya bağlı varlıklar için null (schema.object) adı. |
referenced_database_name |
sysname |
Başvurulan varlıkveritabanının adı. Bu sütun , geçerli bir üç bölümlü veya dört adı belirterek yapılan çapraz veritabanı veya sunucu çapraz başvuruları için doldurulur. Bir bölümü veya iki bölümü adı kullanılarak belirtildiğinde olmayan-şemaya bağlı başvuruları null. Aynı veritabanında olmalıdır ve bu nedenle yalnızca iki parçalı kullanılarak tanımlanabilir çünkü şemaya bağlı varlıklar için null (schema.object) adı. |
referenced_schema_name |
sysname |
Başvurulan varlık olduğu şema. null olmayan-şemaya bağlı başvuruları, için şema adı belirtilmeden varlık başvuruldu. Hiçbir zaman için şemaya bağlı başvuruları null. |
referenced_entity_name |
sysname |
Başvurulan varlıkadı.Nullable değil. |
referenced_minor_name |
sysname |
Başvurulan varlık bir sütun, sütun adı; Aksi halde null.Örneğin, referenced_minor_name başvurulan varlık kendisini listeler satırda null olur. Başvurulan varlık sütun sütun başvuru varlıkadıyla tanımlanır veya üst varlık bir select kullanılan alan * deyim. |
referenced_id |
int |
Başvurulan varlıkkimliği.Zaman referenced_minor_id olan 0 değil, referenced_id bir sütun tanımlanır varlık . Her zaman için sunucu çapraz başvuruları null. Boş veritabanı çevrimdışı olduğundan kimliği saptanamayan veritabanları arası başvurular veya varlık bağlanamaz. Kimliği belirlenemiyorsa veritabanı içindeki başvuruları null.Şemaya bağlı başvuruları için kimliği aşağıdaki durumlarda çözümlenemiyor:
Hiçbir zaman için şemaya bağlı başvuruları null. |
referenced_minor_id |
int |
Başvurulan varlık sütunolduğunda sütun kimliği; Aksi takdirde, 0.Örneğin, referenced_minor_is başvurulan varlık kendisini listeler sırada 0. Yalnızca tüm başvurulan varlıkları bağlanabilir, şemaya bağlı başvuruları için sütun bağımlılıkları bildirilir.Varsa başvurulan varlık olamaz ilişkili, hiçbir sütun-düzey bağımlılıkları bildirilen ve referenced_minor_id 0.Bkz: örnek d. |
referenced_class |
tinyint |
Başvurulan varlıksınıf. 1 = Nesne veya sütun 6 = Türü 10 = xml şema koleksiyon 21 Bölüm işlev= |
referenced_class_desc |
nvarchar(60) |
Başvurulan varlıksınıf açıklaması. OBJECT_OR_COLUMN TÜRÜ XML_SCHEMA_COLLECTION PARTITION_FUNCTION |
is_caller_dependent |
bit |
Çalışma saatsırasında varlık başvurulan şema bağlama oluşur gösterir; Bu nedenle, arayan şemasını temel varlık kimliği çözünürlüğüne bağlıdır.Bu durum bir saklı yordam, genişletilmiş saklı yordamveya bir execute deyimiçinde adlı kullanıcı tanımlı işlev başvurulan varlık olduğundan oluşur. 1 = Başvurulan varlık arayan bağımlı olan ve çalışma saatsırasında çözümlenir.Bu durum, referenced_id ise null. 0 = Başvurulan varlık kimliği arayan bağımlı değildir.Her zaman 0 şemaya bağlı için başvuran ve, açıkça veritabanları arası ve sunucular arası başvuran için bir şema adı belirtin.Örneğin, bir varlık biçiminde başvuru EXEC MyDatabase.MySchema.MyProc değildir arayan bağımlı.Ancak, biçim başvuru EXEC MyDatabase..MyProc olan arayan bağımlı. |
is_ambiguous |
bit |
Olan başvuru belirsiz ve çözümleme sırasında çalışma saat bir kullanıcı tanımlı işlev, bir kullanıcı tanımlı tür (UDT) veya bir xquery başvurusu bir sütun türü gösterir xml.Örneğin, deyimvarsayalımSELECT Sales.GetOrder() FROM Sales.MySales saklı yordamtanımlı. saklı yordam yürütülen kadar onu bilinmiyor olup olmadığını Sales.GetOrder() bir kullanıcı tanımlı işlev Sales şema veya sütun adlı Sales tür UDT yöntem adlı GetOrder(). 1 = Başvuru yöntem bir kullanıcı tanımlı işlev veya sütunkullanıcı tanımlı tür (UDT) belirsiz. 0 = Başvurudur belirli veya işlev çağrıldığında varlık başarıyla bağlanabilir. Her zaman 0 şemaya bağlı başvuruları. |
Kural dışı durumlar
Bir boş sonuç kümesi altında aşağıdaki koşullardan birini verir:
Sistem nesnesi belirtilir.
Belirtilen varlık geçerli veritabanında yok.
Belirtilen varlık herhangi varlıkları başvuru yapmıyor.
Geçersiz bir parametre geçirildi.
Belirtilen başvuru varlık numaralandırılmış bir saklı yordambir hata döndürür.
Ne zaman sütun bağımlılıkları çözümlenemeyen 2020 hatasını verir.Bu hata, nesne -düzey bağımlılıkları döndüren sorgu engellemez.Daha fazla bilgi için, bkz. Sorun giderme SQL bağımlılıklar.
Açıklamalar
Server -düzeyDDL tetikleyici başvuruda varlıkları dönmek için herhangi bir veritabanı bağlamında bu işlev çalıştırılır.
Aşağıdaki tablo , hangi için bağımlılık bilgileri oluşturulan ve bakımını varlıkları türlerini listeler.Bağımlılık bilgilerini oluşturulan veya olmayan kuralları, varsayılanlar, geçici tablolar, geçici saklı yordamlar veya sistem nesneleri için saklanır.
Varlık türü |
varlıkbaşvuran |
Başvurulan varlık |
---|---|---|
Tablo |
Evet * |
Evet |
Görünüm |
Evet |
Evet |
Transact-SQL saklı yordam** |
Evet |
Evet |
CLR saklı yordamı |
Hayır |
Evet |
Transact-SQLkullanıcı tanımlı işlev |
Evet |
Evet |
clr kullanıcı tanımlı işlev |
Hayır |
Evet |
CLR tetikleyicisi (DML ve DDL) |
Hayır |
Hayır |
Transact-SQL DML tetikleyici |
Evet |
Hayır |
Transact-SQL-Veritabanıdüzey DDL tetikleyici |
Evet |
Hayır |
Transact-SQLServer -düzey DDL tetikleyici |
Evet |
Hayır |
Genişletilmiş saklı yordamları |
Hayır |
Evet |
Sıra |
Hayır |
Evet |
Eşanlamlı |
Hayır |
Evet |
Tür (diğer ad ve CLR kullanıcı tanımlı türü) |
Hayır |
Evet |
xml şema koleksiyon |
Hayır |
Evet |
Bölüm işlev |
Hayır |
Evet |
* Yalnızca başvurduğu zaman tablo bir varlık başvuru olarak izlenen bir Transact-SQL modülü, kullanıcı tanımlı türveya hesaplanmış bir sütuntanımında xml şema koleksiyon DENETLEME kısıtlaması veya default kısıtlaması.
** 1 Ya da bir başvuru veya başvurulan varlıkolarak izlenmez den büyük bir tamsayı değeri saklı yordamlarda numaralandırılmış.
Daha fazla bilgi için, bkz. sql bağımlılıklar anlama.
İzinler
Üzerinde select izni gerektirir sys.dm_sql_referenced_entities ve başvuru varlıküzerinde görünüm TANIMI izni.Varsayılan olarak, select izni public.Başvuru varlık - veritabanıdüzeyDDL tetikleyici olduğunda veritabanı üzerinde görünüm TANIMI izni veya veritabanı üzerinde alter database DDL tetikleyici izni gerektirir. Başvuru varlık server -düzey DDL tetikleyici olduğunda sunucu üzerindeki herhangi görünüm TANIMI izni gerektirir.
Örnekler
A.Veritabanı -düzey DDL Tetikleyici tarafından başvurulan varlıkları döndürme
Aşağıdaki örnek döndürür veritabanı -düzey DDL Tetikleyici tarafından başvurulan varlıkları (tablolar ve sütunlar) ddlDatabaseTriggerLog.
USE AdventureWorks2008R2;
GO
SELECT referenced_schema_name, referenced_entity_name, referenced_minor_name,
referenced_minor_id, referenced_class_desc
FROM sys.dm_sql_referenced_entities ('ddlDatabaseTriggerLog', 'DATABASE_DDL_TRIGGER');
GO
B.Bir nesne tarafından başvurulan varlıkları döndürme
Aşağıdaki örnek kullanıcı tanımlı işlevtarafından başvurulan varlıkları verirdbo.ufnGetContactInformation.
USE AdventureWorks2008R2;
GO
SELECT referenced_schema_name, referenced_entity_name, referenced_minor_name,
referenced_minor_id, referenced_class_desc, is_caller_dependent, is_ambiguous
FROM sys.dm_sql_referenced_entities ('dbo.ufnGetContactInformation', 'OBJECT');
GO
C.sütun bağımlılıkları döndürme
Aşağıdaki örnek tablooluştururTable1 hesaplanmış bir sütunile c tanımlanmış sütunlar toplamı olarak a ve b. sys.dm_sql_referenced_entities Görünümü adlı sonra.Hesaplanan sütuntanımlanan her sütun için iki satır görünümü verir.
USE AdventureWorks2008R2;
GO
CREATE TABLE dbo.Table1 (a int, b int, c AS a + b);
GO
SELECT referenced_schema_name AS schema_name,
referenced_entity_name AS table_name,
referenced_minor_name AS referenced_column,
COALESCE(COL_NAME(OBJECT_ID(N'dbo.Table1'),referencing_minor_id), 'N/A') AS referencing_column_name
FROM sys.dm_sql_referenced_entities ('dbo.Table1', 'OBJECT');
GO
-- Remove the table.
DROP TABLE dbo.Table1;
GO
Sonuç kümesi buradadır.
schema_name table_name referenced_column referencing_column
----------- ---------- ----------------- ------------------
dbo Table1 a c
dbo Table1 b c
D.Şemaya bağlı sütun bağımlılıkları döndürme
Aşağıdaki örnek düşünceye Table1 ve Table2 ve saklı yordam Proc1.Yordam başvurular Table2 ve tablovarolmayan Table1.Görünüm sys.dm_sql_referenced_entities başvuru varlıkolarak belirtilen saklı yordam çalıştırın.sonuç kümesi için bir satır gösterir Table1 ve Table2.Çünkü Table1 yok, sütun bağımlılıkları çözümlenemeyen ve 2020 hata döndürüldü.
USE AdventureWorks2008R2;
GO
IF OBJECT_ID ( 'dbo.Table1', 'U' ) IS NOT NULL
DROP TABLE dbo.Table1;
GO
CREATE TABLE dbo.Table2 (c1 int, c2 int);
GO
CREATE PROCEDURE dbo.Proc1 AS
SELECT a, b, c FROM Table1;
SELECT c1, c2 FROM Table2;
GO
SELECT referenced_id, referenced_entity_name AS table_name, referenced_minor_name AS referenced_column_name
FROM sys.dm_sql_referenced_entities ('dbo.Proc1', 'OBJECT');
GO
E.Dinamik bağımlılık bakım gösteren
Aşağıdaki örnek, d bağımlılıkları dinamik olarak tutulan göstermek için örnek genişletir.İlk örnek yeniden oluşturur Table1, hangi örnek d. içinde bırakılanSonra sys.dm_sql_referenced_entities yeniden başvuru varlıkolarak belirtilen saklı yordam çalıştırın.sonuç kümesi tabloları ve bunların ilgili sütunlara saklı yordam tanımlı döndürüldüğünü gösterir.
USE AdventureWorks2008R2;
GO
CREATE TABLE Table1 (a int, b int, c AS a + b);
GO
SELECT referenced_id, referenced_entity_name AS table_name, referenced_minor_name as column_name
FROM sys.dm_sql_referenced_entities ('dbo.Proc1', 'OBJECT');
GO
DROP TABLE Table1, Table2;
DROP PROC Proc1;
GO
Sonuç kümesi buradadır.
referenced_id, table_name, column_name
------------- ----------- -----------
2139154566 Table1 NULL
2139154566 Table1 a
2139154566 Table1 b
2139154566 Table1 c
2707154552 Table2 NULL
2707154552 Table2 c1
2707154552 Table2 c2
Ayrıca bkz.