Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
SQL Server'da belirtilen referans varlığı tanımında isimle referans verilen her kullanıcı tanımlı varlık için bir satır döndürür. İki varlık arasında bir bağımlılık, bir kullanıcı tanımlı varlık, referans edilen varlık, referans varlığı olarak adlandırılan başka bir kullanıcı tanımlı varlığın kalıcı SQL ifadesinde isimleriyle ortaya çıktığında oluşur. Örneğin, bir saklanan prosedür belirtilen referans varlığı ise, bu fonksiyon tablolar, görünümler, kullanıcı tanımlı türler (UDT) veya diğer depolanmış prosedürler gibi depolanmış prosedürde referans verilen tüm kullanıcı tanımlı varlıkları döndürür.
Bu dinamik yönetim fonksiyonunu kullanarak belirtilen referans varlık tarafından referans verilen aşağıdaki varlık türlerini raporlayabilirsiniz:
Şema bağlı varlıklar
Şema bağlı olmayan varlıklar
Veritabanları ve sunucular arası varlıklar
Şema bağlı ve şema bağlı olmayan varlıklara sütun düzeyinde bağımlılıklar
Kullanıcı tanımlı türler (alias 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
}
Arguments
[ schema_name.
] referencing_entity_name
Referans veren varlığın adıdır.
schema_name referans sınıfı OBJECT olduğunda gereklidir.
schema_name.referencing_entity_name'dirnvarchar(517).
<referencing_class> ::= { NESNE | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER }
Belirtilen referans varlığın sınıfıdır. Her ifadede yalnızca bir sınıf belirtilebilir.
<referencing_class>nvarchar(60)'dır.
Döndürülen Tablo
| Sütun adı | Veri türü | Description |
|---|---|---|
| referencing_minor_id | int | Referans varlığı bir sütun olduğunda sütun kimliği; aksi takdirde 0. Null olamaz. |
| referenced_server_name | sysname | Referans edilen varlığın sunucusunun adı. Bu sütun, geçerli dört parçalı bir isim belirtilerek oluşturulan sunucular arası bağımlılıklar için doldurulur. Çok parçalı isimler hakkında bilgi için Transact-SQL sözdizimi konvansiyonlarına bakınız. Dört parçalı bir isim belirtilmeden referans verilen şema bağlı olmayan bağımlılıklar için NULL. Şema bağlı varlıklar için NULL çünkü aynı veritabanında olmaları gerekir ve bu nedenle yalnızca iki parçalı (şema.nesne) bir adla tanımlanabilirler. |
| referenced_database_name | sysname | Referans verilen varlığın veritabanının adı. Bu sütun, geçerli üç veya dört parçalı bir isim belirtilerek oluşturulan çapraz veritabanı veya sunucu çapraz referanslar için doldurulur. Şema sınırı olmayan referanslar için bir veya iki parçalı bir isim kullanılarak belirtildiğinde NULL olur. Şema bağlı varlıklar için NULL çünkü aynı veritabanında olmaları gerekir ve bu nedenle yalnızca iki parçalı (şema.nesne) bir adla tanımlanabilirler. |
| referenced_schema_name | sysname | Referans edilen varlığın ait olduğu şema. Şema adı belirtilmeden varlığa referans verilen şema sınırı olmayan referanslar için NULL. Şema bağlı referanslar için asla NULL olmayın. |
| referenced_entity_name | sysname | Referans verilen varlığın adı. Null olamaz. |
| referenced_minor_name | sysname | Referans edilen varlık bir sütun olduğunda sütun adı; aksi takdirde NULL. Örneğin, referenced_minor_name, referans edilen varlığın kendisini listeleyen satırda NULL'dur. Referanslı varlık, bir sütunun referans varlığında adıyla tanımlandığı veya ana varlık SELECT * ifadesinde kullanıldığında bir sütundur. |
| referenced_id | int | Referans verilen varlığın kimliği. referenced_minor_id 0 değilse, referenced_id sütunun tanımlandığı varlıktır. Sunucular arası referanslar için her zaman NULL olsun. Veritabanı çevrimdışı olduğu veya varlık bağlanamadığı için kimlik belirlenemediğinde çapraz veritabanı referansları için NULL. Kimlik belirlenemezse veritabanı içindeki referanslar için NULL olur. Şema bağlı olmayan referanslar için, referans alan varlık veritabanında bulunmadığında veya isim çözümü arayana bağlı olduğunda kimlik çözülemez. İkinci durumda, is_caller_dependent 1 olarak ayarlanmıştır. Şema bağlı referanslar için asla NULL olmayın. |
| referenced_minor_id | int | Referans edilen varlık bir sütun olduğunda sütun kimliği; aksi takdirde, 0. Örneğin, referans verilen varlığın kendisini listeleyen satırda referenced_minor_is 0'dır. Şema bağlı olmayan referanslar için, sütun bağımlılıkları yalnızca tüm referans edilen varlıklar sınırlandırılabildiğinde raporlanır. Herhangi bir referans varlık sınırlandırılamazsa, sütun düzeyinde bağımlılıklar raporlanmaz ve referenced_minor_id 0'dır. Örnek D'ye bakınız. |
| referenced_class | tinyint | Referans edilen varlığın sınıfı. 1 = Nesne veya sütun 6 = Tip 10 = XML şema koleksiyonu 21 = Bölme fonksiyonu |
| referenced_class_desc | nvarchar(60) | Referans verilen varlığın sınıfının tanımı. OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION |
| is_caller_dependent | bit | Referans edilen varlık için şema bağlamasının çalışma zamanında gerçekleştiğini gösterir; bu nedenle, varlık kimliğinin çözümü arayanın şemasına bağlıdır. Bu, referans edilen varlık bir EXECUTE ifadesi içinde çağrılan bir saklanan prosedür, genişletilmiş bir işlem veya kullanıcı tanımlı bir fonksiyon olduğunda ortaya çıkar. 1 = Referans verilen varlık çağıranlara bağlıdır ve çalışma zamanında çözülür. Bu durumda referenced_id NULL'dur. 0 = Referans verilen varlık kimliği arayanlara bağlı değildir. Şema bağlı referanslar ve şema adını açıkça belirten çapraz veritabanı ve sunucu referansları için her zaman 0 olur. Örneğin, formatta EXEC MyDatabase.MySchema.MyProc bir varlığa yapılan bir referans arayana bağlı değildir. Ancak, formattaki EXEC MyDatabase..MyProc bir referans arayana bağlıdır. |
| is_ambiguous | bit | Referansın belirsiz olduğunu ve çalışma zamanında kullanıcı tanımlı bir fonksiyona, kullanıcı tanımlı bir tipe (UDT) veya xml tipindeki bir sütuna xquery referansına çözümlenebildiğini gösterir. Örneğin, ifadenin SELECT Sales.GetOrder() FROM Sales.MySales bir saklanan prosedürde tanımlandığını varsayalım. Saklanan prosedür yürütülene kadar, Sales.GetOrder() şemada kullanıcı tanımlı bir fonksiyon Sales olup olmadığı bilinmez mi yoksa UDT tipi sütununda Sales ve bir metod olarak adlandırılan GetOrder()bir yöntem olup olmadığı bilinmez.1 = Kullanıcı tanımlı bir fonksiyon veya sütun kullanıcı tanımlı tip (UDT) yöntemine referans belirsizdir. 0 = Referans belirsizdir veya fonksiyon çağrıldığında varlık başarıyla sınırlandırılabilir. Şema bağlı referanslar için her zaman 0. |
| is_selected | bit | 1 = Nesne veya sütun seçilir. |
| is_updated | bit | 1 = Nesne veya sütun değiştirilir. |
| is_select_all | bit | 1 = Nesne, sadece nesne düzeyinde bir SELECT * cümlesinde kullanılır. |
| is_all_columns_found | bit | 1 = Nesne için tüm sütun bağımlılıkları bulunabilir. 0 = Nesne için sütun bağımlılıkları bulunamadı. |
| is_insert_all | bit | 1 = Nesne, sadece nesne düzeyinde bir sütun listesi olmayan bir INSERT ifadesinde kullanılır. Bu sütun SQL Server 2016'da eklenmiştir. |
| is_incomplete | bit | 1 = Nesne veya sütunda bağlama hatası vardır ve eksiktir. Bu sütun SQL Server 2016 SP2'de eklenmiştir. |
Exceptions
Aşağıdaki koşullardan herhangi biri altında boş bir sonuç kümesi döndürür:
Bir sistem nesnesi belirtilir.
Belirtilen varlık mevcut veritabanında mevcut değildir.
Belirtilen varlık herhangi bir varlığa referans vermez.
Geçersiz bir parametre geçirilir.
Belirtilen referans varlığı numaralandırılmış bir depolanmış prosedür olduğunda hata döndürür.
Sütun bağımlılıkları çözülemediğinde 2020 hatası döndürür. Bu hata, sorgunun nesne düzeyinde bağımlılıkları geri döndürmesini engellemez.
Açıklamalar
Bu fonksiyon, herhangi bir veritabanı bağlamında çalıştırılarak sunucu düzeyinde bir DDL tetikleyicisine referans veren varlıkları döndürebilir.
Aşağıdaki tablo, bağımlılık bilgisinin oluşturulduğu ve korunduğu varlık türlerini listeler. Kurallar, varsayılanlar, geçici tablolar, geçici depolanmış prosedürler veya sistem nesneleri için bağımlılık bilgisi oluşturulmaz veya korunmaz.
| Varlık türü | Referans varlığı | Referans verilen varlık |
|---|---|---|
| Tablo | Evet* | Yes |
| View | Yes | Yes |
| Transact-SQL saklanan prosedür** | Yes | Yes |
| CLR depolanmış prosedür | Hayı | Yes |
| Transact-SQL kullanıcı tanımlı fonksiyon | Yes | Yes |
| CLR kullanıcı tanımlı fonksiyon | Hayı | Yes |
| CLR tetikleyicisi (DML ve DDL) | Hayı | Hayı |
| Transact-SQL DML tetikleyicisi | Yes | Hayı |
| Transact-SQL veritabanı düzeyinde DDL tetikleyicisi | Yes | Hayı |
| Transact-SQL sunucu seviyesinde DDL tetikleyici | Yes | Hayı |
| Genişletilmiş saklı prosedürler | Hayı | Yes |
| Queue | Hayı | Yes |
| Synonym | Hayı | Yes |
| Tip (takma ad ve CLR kullanıcı tanımlı tip) | Hayı | Yes |
| XML şema koleksiyonu | Hayı | Yes |
| Bölünme fonksiyonu | Hayı | Yes |
* Bir tablo, yalnızca hesaplanan bir sütun, CHECK kısıtlaması veya DEFAULT kısıtlaması tanımında bir Transact-SQL modülüne, kullanıcı tanımlı tipe veya XML şema koleksiyonuna referans verdiğinde referans varlık olarak takip edilir.
** 1'den büyük tam sayı değeri olan numaralı saklanan prosedürler ne referans veren ne de referans alan varlık olarak takip edilmez.
Permissions
Referans veren varlık üzerinde sys.dm_sql_referenced_entities SELECT izni ve VIEW DEFINITION izni gerektirir. Varsayılan olarak, SELECT izni halka açık olarak verilir. Referans varlığı veritabanı düzeyinde bir DDL tetikleyici olduğunda veritabanında VIEW DEFINITION izni veya veritabanında ALTER DATABASE DDL TRIGGER izni gerektirir. Referans varlığı sunucu düzeyinde bir DDL tetikleyici olduğunda sunucuda VIEW ANY DEFINITION izni gerektirir.
Örnekler
A. Veritabanı düzeyinde bir DDL tetikleyici tarafından referans verilen varlıkları döndürme
Aşağıdaki örnek, veritabanı düzeyindeki DDL tetikleyicisi ddlDatabaseTriggerLogtarafından referans verilen varlıkları (tablolar ve sütunlar) döndürür.
USE AdventureWorks2022;
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 referans verilen varlıkları geri döndürme
Aşağıdaki örnek, kullanıcı tanımlı fonksiyon dbo.ufnGetContactInformationtarafından referanslanan varlıkları geri getirir.
USE AdventureWorks2022;
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. Dönüş sütun bağımlılıkları
Aşağıdaki örnek, hesaplanan sütununc, sütunların a toplamı olarak tanımlandığı tabloyu Table1 oluşturur.b Sonra manzara sys.dm_sql_referenced_entities çağrılır. Görünüm, hesaplanan sütunda tanımlanan her sütun için bir satır döner.
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 aşağıdadı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ürülmesi
Aşağıdaki örnek işlemi bırakır Table1 ve oluşturur Table2 ve saklanır Proc1. Prosedür referans Table2 ve var olmayan tablo Table1. Görünüm sys.dm_sql_referenced_entities , referans varlık olarak belirtilen saklanan prosedürle çalıştırılır. Sonuç kümesi, bir satır için Table1 ve 3 satır Table2gösterir. Mevcut Table1 olmadığı için sütun bağımlılıkları çözülemez ve 2020 hatası döner. Sütun, is_all_columns_found keşfedilemeyen sütunların olduğunu belirtmek için 0 Table1 döner.
DROP TABLE IF EXISTS 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 aşağıdadı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 1
The 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ının gösterilmesi
Bu Örnek E, Örnek D'nin çalıştırıldığını varsayıyor. Örnek E, bağımlılıkların dinamik olarak korunduğunu gösterir. Örnek şunları yapar:
- Yeniden yaratır
Table1ve bu Örnek D'de düşürülmüştür. - Run Then
sys.dm_sql_referenced_entities, referans varlık olarak belirtilen saklanan prosedürle tekrar çalıştırılır.
Sonuç kümesi, her iki tablonun ve depolanan prosedürde tanımlanan ilgili sütunlarının geri döndüğünü gösterir. Ayrıca, is_all_columns_found sütun tüm nesneler ve sütunlar için 1 döndürür.
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 aşağıdadı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. Nesne veya sütun kullanımını geri döndürme
Aşağıdaki örnek, depolanan prosedürün HumanResources.uspUpdateEmployeePersonalInfonesnelerini ve sütun bağımlılıklarını geri döndürür. Bu prosedür, NationalIDNumbertablonun sütunlarını , BirthDate,``MaritalStatus, ve GenderEmployee belirli BusinessEntityID bir değere göre günceller. Başka bir saklanan prosedür, upsLogError TRY'de tanımlanır... CATCH blokunu kullanarak herhangi bir çalıştırma hatasını yakalayabilir. , is_updated, ve is_select_all sütunları, is_selectedbu nesnelerin ve sütunların referans nesnesi içinde nasıl kullanıldığına dair bilgi sağlar. Değiştirilen tablo ve sütunlar, is_updated sütununda 1 ile gösterilir. Sadece sütun BusinessEntityID seçilir ve saklanan prosedür uspLogError ne seçilir ne de değiştirilir.
USE AdventureWorks2022;
GO
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 aşağıdadı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
Ayrıca Bkz.
sys.dm_sql_referencing_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)