sys.dm_sql_referenced_entities (Transact-sql)
Kullanıcı tanımlı ad tanımında belirtilen başvuru varlık tarafından başvurulan her varlık için bir satır döndürür. Kullanıcı tanımlı bir varlık olarak adlandırılan iki varlık arasında bir bağımlılık oluşturulur başvurulan varlık, kalıcı bir sql ifadesi olarak adlandırılan başka bir kullanıcı tarafından tanımlanan varlık adı görünür varlık başvuran. Örneğin, bir saklı yordam belirtilen başvuru varlık ise, bu işlevi başvurulan kullanıcı tanımlı tüm varlıklar gibi tabloları, görünümleri, kullanıcı tanımlı türler (UDTs), saklı yordam döndürür veya diğer saklı yordamlar.
Belirtilen başvuru varlık tarafından başvurulan varlıkları aşağıdaki türlerde rapor için bu dinamik yönetimi işlevini kullanabilirsiniz:
Şemaya bağlı varlıklar
Olmayan-şemaya bağlı varlıklar
Geçici veritabanı ve sunucu çapraz varlıkları
Sütun düzeyi 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şlevleri
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ık addır. schema_namebaşvuru sınıf nesnesi olduğunda gereklidir.schema_name.referencing_entity_nameis nvarchar(517).
<referencing_class>::= { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER}
Belirtilen sınıf varlık başvuran. Yalnızca bir sınıf deyimi belirtilebilir.<referencing_class>is nvarchar(60).
Dönen Tablo
Sütun adı |
Veri türü |
Açıklama |
---|---|---|
referencing_minor_id |
int |
Başvuru varlık bir sütundur sütun kimliği; Aksi halde 0. NULL değil. |
referenced_server_name |
sysname |
Başvurulan varlık sunucusunun adı. Bu sütun, geçerli bir four-part adı belirterek yapılan çapraz sunucu bağımlılıklar için doldurulur. Çok parçalı adları hakkında daha fazla bilgi için bkz: Transact-SQL Sözdizim Kuralları (Transact-SQL). null olmayan-şemaya bağlı bağımlılıkları kendisi için four-part adı belirtilmeden varlığı başvuruldu. Çünkü onlar aynı veritabanında olmalıdır ve bu nedenle yalnızca iki parçalı kullanarak tanımlanabilir şemaya bağlı varlıklar için null (schema.object) isim. |
referenced_database_name |
sysname |
Başvurulan varlık veritabanının adı. Bu sütun, geçerli bir üç bölümlü veya four-part adı belirterek yapılan geçici veritabanı veya sunucu çapraz referanslar için doldurulur. Bir bölümü veya iki bölümü adı kullanarak belirtildiğinde olmayan-şemaya bağlı başvuruları null. Çünkü onlar aynı veritabanında olmalıdır ve bu nedenle yalnızca iki parçalı kullanarak tanımlanabilir şemaya bağlı varlıklar için null (schema.object) isim. |
referenced_schema_name |
sysname |
Başvurulan varlık olduğu şema. null olmayan-şemaya bağlı başvuruları hangi şema adı belirtilmeden varlığı başvuruldu. Asla şemaya bağlı başvuruları null. |
referenced_entity_name |
sysname |
Başvurulan varlık adı. NULL değil. |
referenced_minor_name |
sysname |
Başvurulan varlık bir sütun olduğunda sütun adı; Aksi halde null. Örneğin, referenced_minor_namebaşvurulan varlık listelendiği satır null olur. Başvurulan varlık bir sütuna başvuru varlık adı tanımlanır veya üst varlık bir select kullanılan sütundur * deyimi. |
referenced_id |
int |
Başvurulan varlık Kımlığı. Ne zaman referenced_minor_idolduğunu değil 0, referenced_idsütun tanımlı varlıktır. Her zaman sunucu çapraz başvuruları null. null olduğunda veritabanı çevrimdışı olduğundan kimliği belirlenemedi geçici veritabanı başvuruları veya varlık bağlanamaz. Kimliği belirlenemiyorsa veritabanı içindeki başvuruları null. Olmayan-şemaya bağlı başvuruları için aşağıdaki durumlarda kimliği çözümlenemedi:
Asla şemaya bağlı başvuruları null. |
referenced_minor_id |
int |
Başvurulan varlık bir sütundur sütun kimliği; durumda, 0. Örneğin, referenced_minor_isbaşvurulan varlık listelendiği sırada 0. Ne zaman yalnızca tüm başvurulan varlıkları bağlanabilir olmayan-şemaya bağlı başvuruları için Sütun bağımlılıkları bildirilir. Başvurulan herhangi bir varlık bağlı olamaz, hiçbir sütun düzeyi bağımlılıkları bildirilir ve referenced_minor_id0. Bakın örnek ö. |
referenced_class |
tinyint |
Başvurulan varlık sınıf. 1 = Nesne veya sütun 6 = Türü 10 = xml şema koleksiyonu 21 Bölüm işlevi = |
referenced_class_desc |
nvarchar(60) |
Başvurulan varlık sınıf açıklaması. OBJECT_OR_COLUMN TÜRÜ XML_SCHEMA_COLLECTION PARTITION_FUNCTION |
is_caller_dependent |
bit |
Şema bağlama için başvurulan varlık zamanında meydana gösterir; Bu nedenle, arayan şema varlık kimliği çözünürlüğüne bağlıdır. Başvurulan varlık bir saklı yordam, genişletilmiş saklı yordam veya kullanıcı tanımlı işlev execute deyimi içinde denilen bu oluşur. 1 = Başvurulan varlık arayan bağımlı olduğunu ve çalışma zamanında çözümlenir. Bu durumda, referenced_idnull olur. 0 = Başvurulan varlık Kımlığı değil arayan bağımlı. Her zaman 0 şemaya bağlı başvuruları ve açıkça geçici veritabanı ve çapraz sunucu başvuran bir şema adı belirtin. Örneğin, bir varlık biçiminde başvuru EXEC MyDatabase.MySchema.MyProcArayan bağımlı değil. Ancak, başvuru biçimi EXEC MyDatabase..MyProcarayan bağlıdır. |
is_ambiguous |
bit |
Başvuru belirsiz ve kullanıcı tanımlı bir işlev, bir kullanıcı tanımlı türü (udt) veya xquery başvuru türü sütununa çalıştırma zamanında çözebilirsiniz gösterir xml. Örneğin, deyimi kabul SELECT Sales.GetOrder() FROM Sales.MySalesbir saklı yordam tanımlanır. Saklı yordam yürütülen kadar bilinmemektedir olsun Sales.GetOrder()kullanıcı tanımlı bir işlev olduğunu Salesşema veya adlı sütun Salestürü udt adındaki bir yöntemi ile GetOrder(). 1 = Başvuru bir kullanıcı tanımlı işlev veya sütun kullanıcı tanımlı türü için (udt) yöntemi belirsizdir. 0 = Başvurudur benzersiz veya işlev çağrıldığında varlığı başarıyla bağlanabilir. Şemaya bağlı başvuruları her zaman 0. |
is_selected |
bit |
1 = Nesne veya sütun seçili. |
is_updated |
bit |
1 = Nesne veya sütun. |
is_select_all |
bit |
1 = Nesne bir select kullanılan * yan tümcesi (yalnızca nesne düzeyi). |
is_all_columns_found |
bit |
1 = Tüm sütun bağımlılıkları için nesne bulunamadı. 0 = Sütun bağımlılıkları için nesne bulunamadı. |
Kural dışı durumlar
Aşağıdaki koşullardan herhangi biri altında ayarlamak boş bir sonuç döndürür:
Sistem nesnesi belirtilir.
Belirtilen varlık geçerli veritabanında yok.
Belirtilen varlık, tüm varlıkları başvurmuyor.
Geçersiz bir parametre geçirildi.
Belirtilen başvuru varlık numaralandırılmış bir saklı yordamı bir hata döndürür.
Hata olduğunda sütun bağımlılıkları çözümlenemeyen 2020 döndürür. Bu hata, nesne düzeyi bağımlılıkları döndürme sorgu engellemez. Daha fazla bilgi için, bkz. Troubleshooting SQL Dependencies.
Açıklamalar
Bu başvuru sunucu düzeyinde ddl tetikleyici varlıkları dönmek için herhangi bir veritabanı bağlamında bu işlev çalıştırılır.
Aşağıdaki tabloda, kendisi için bağımlılık bilgileri oluşturulan ve saklanan varlıklar türlerini listeler. Bağımlılık bilgilerini oluşturulmaz veya kuralları, varsayılanlar, geçici tablolar, geçici saklı yordamlar veya sistem nesneleri için yapılmaktadır.
Varlık türü |
Başvuru varlık |
Başvurulan varlık |
---|---|---|
Tablo |
"EVET" |
Evet |
Görünüm |
Evet |
Evet |
Transact-SQLsaklı 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 tetikleyici (dml ve ddl) |
Hayır |
Hayır |
Transact-SQLdml tetikleyici |
Evet |
Hayır |
Transact-SQLVeritabanı düzeyinde ddl tetikleyici |
Evet |
Hayır |
Transact-SQLSunucu düzeyinde 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 kullanıcı tanımlı clr türü) |
Hayır |
Evet |
xml şema koleksiyonu |
Hayır |
Evet |
Bölüm işlevi |
Hayır |
Evet |
* Tablo yalnızca başvurduğu bir başvuru varlık izlenir bir Transact-SQLmodülü, türü kullanıcı tanımlı veya hesaplanmış sütun, check kısıtlaması veya default kısıtlaması tanımında xml şema koleksiyonu.
** Numaralandırılmış saklı yordamlar ile 1 ya da bir başvuru veya başvurulan varlık olarak izlenmez daha büyük bir tamsayı değeri.
Daha fazla bilgi için, bkz. Understanding SQL Dependencies.
İzinler
Üzerinde select izni gerektirir sys.dm_sql_referenced_entitiesve başvuru varlık tanımını izni. Varsayılan olarak, için select izni verilir public. Başvuru varlık veritabanı düzeyinde ddl tetikleyici olduğunda veritabanı üzerinde görünüm tanımı izni veya veritabanı ddl TETIKLEYICI alter veritabanı izni gerektirir. Başvuru varlık sunucu düzeyinde ddl tetikleyici olduğunda sunucu üzerinde görünüm tanımı HIÇBIR izni gerektirir.
Örnekler
A.Veritabanı düzeyinde ddl tetikleyici tarafından başvurulan varlıkları döndürme
Aşağıdaki örnek veritabanı düzeyinde ddl tetikleyici tarafından başvurulan varlıkları (tablolar ve sütunlar) verir ddlDatabaseTriggerLog.
USE AdventureWorks2012;
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şlevi tarafından başvurulan varlıkları verir dbo.ufnGetContactInformation.
USE AdventureWorks2012;
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 tablo oluşturur Table1ile hesaplanan sütun csütun toplamı olarak tanımlanan ave b. sys.dm_sql_referenced_entitiesGörünümü sonra çağırdı. Görünüm, hesaplanan sütun tanımlanan her sütun için iki satır döndürür.
USE AdventureWorks2012;
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.Şema-bağlı olmayan sütun bağımlılıkları döndürme
Aşağıdaki örnek Table1ve Table2ve saklı yordam Proc1. Prosedürü referanslar Table2varolmayan tablo Table1. Görünüm sys.dm_sql_referenced_entitiesbaşvuru varlık belirtilen saklı yordamı çalıştırın. Sonuç kümesi için bir satır gösterir Table1ve 3 satır için Table2. Çünkü Table1yok, Sütun bağımlılıkları çözümlenemeyen ve döndürülen hata 2020. is_all_columns_found0 Sütun döndürür Table1değil keşfedilen sütun olduğunu bildiren.
USE AdventureWorks2012;
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, is_all_columns_found
FROM sys.dm_sql_referenced_entities ('dbo.Proc1', 'OBJECT');
GO
Sonuç kümesi buradadır.
referenced_id table_name referenced_column_name is_all_columns_found
------------- ------------ ----------------------- --------------------
935674381 Table2 NULL 1
935674381 Table2 C1 1
935674381 Table2 C2 1
NULL Table1 NULL 0
Msg 2020, Level 16, State 1, Line 1The dependencies reported for entity "dbo.Proc1" might not include references to all columns. This is either because the entity references an object that does not exist or because of an error in one or more statements in the entity. Before rerunning the query, ensure that there are no errors in the entity and that all objects referenced by the entity exist.
E.Dinamik bağımlılık bakım gösteren
Aşağıdaki örnek, örnek bağımlılıkları dinamik olarak tutulan göstermek için d genişletir. İlk örnek oluşturur Table1, hangi örnek d. çıkarıldı Sonra sys.dm_sql_referenced_entitiesyeniden başvuru varlık belirtilen saklı yordamı çalıştırın. Sonuç kümesi gösterir tablolar ve saklı yordam tanımlanan kendi ilgili sütunları döndürülür. Ayrıca, is_all_columns_foundsütun döndürür tüm nesneler ve sütunlar için 1.
USE AdventureWorks2012;
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, is_all_columns_found
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 referenced_column_name is_all_columns_found
------------- ------------ ----------------------- --------------------
935674381 Table2 NULL 1
935674381 Table2 c1 1
935674381 Table2 c2 1
967674495 Table1 NULL 1
967674495 Table1 a 1
967674495 Table1 b 1
967674495 Table1 c 1
F.Geri dönen nesne veya sütun kullanımı
Aşağıdaki örnek verir nesneleri ve sütun bağımlılıkları saklı yordam HumanResources.uspUpdateEmployeePersonalInfo. Bu yordam güncelleştirmeleri sütunları NationalIDNumber, BirthDate, MaritalStatus, ve Gender, Employeetablosu üzerinde belirtilen temel BusinessEntityIDdeğer. Başka bir saklı yordam upsLogErrortanımlı bir try…Yürütme hataları yakalamak için catch bloğu. is_selected, is_updated, Ve is_select_allsütunları bu nesneleri ve sütunları başvuru nesnesi içinde nasıl kullanıldığı hakkında bilgi dönmek. Tablo ve değiştirilmesi sütun 1 is_updated sütununda belirtilir. BusinessEntityIDSütun yalnızca seçili ve saklı yordam uspLogErrorne seçilen ne güncellenmiştir.
SELECT referenced_entity_name AS table_name, referenced_minor_name as column_name, is_selected, is_updated, is_select_all
FROM sys.dm_sql_referenced_entities ('HumanResources.uspUpdateEmployeePersonalInfo', 'OBJECT');
Sonuç kümesi buradadır.
table_name column_name is_selected is_updated is_select_all
------------- ------------------- ----------- ---------- -------------
uspLogError NULL 0 0 0
Employee NULL 0 1 0
Employee BusinessEntityID 1 0 0
Employee NationalIDNumber 0 1 0
Employee BirthDate 0 1 0
Employee MaritalStatus 0 1 0
Employee Gender 0 1 0