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:

  • Başvurulan varlık veritabanında yok.

  • Arayan bağımlı ad çözümlemesidir.Bu durum, is_caller_dependent küme 1.

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