Aracılığıyla paylaş


sys.dm_sql_referencing_entities (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Mevcut veritabanındaki her varlık için bir satır döner; bu varlık başka bir kullanıcı tanımlı varlığa isimle atıfta bulunur. İki varlık arasında bir bağımlılık, referans edilen varlık olarak adlandırılan bir varlık, referans varlığı olarak adlandırılan başka bir varlığın kalıcı SQL ifadesinde isimleriyle ortaya çıktığında oluşur; bu ifade referans varlık olarak adlandırılır. Örneğin, kullanıcı tanımlı bir tür (UDT) referans edilen varlık olarak belirtilmişse, bu fonksiyon tanımında o tipe isimle referans veren her kullanıcı tanımlı varlığı döndürür. Bu fonksiyon, belirtilen varlığa referans verebilecek diğer veritabanlarındaki varlıkları döndürmez. Bu fonksiyon, sunucu düzeyinde bir DDL tetikleyicisini referans varlık olarak döndürmek için ana veritabanı bağlamında çalıştırılmalıdır.

Bu dinamik yönetim fonksiyonunu kullanarak mevcut veritabanında belirtilen varlığa referans veren aşağıdaki tür varlıkları raporlayabilirsiniz:

  • Şema bağlı veya şema bağlı olmayan varlıklar

  • Veritabanı düzeyinde DDL tetikleyicileri

  • Sunucu düzeyinde DDL tetikleyicileri

Şunlar için geçerlidir: SQL Server (SQL Server 2008 (10.0.x) ve sonrası), SQL Veritabanı.

Transact-SQL söz dizimi kuralları

Sözdizimi

sys.dm_sql_referencing_entities (  
    ' schema_name.referenced_entity_name ' , ' <referenced_class> ' )  
  
<referenced_class> ::=  
{  
    OBJECT  
  | TYPE  
  | XML_SCHEMA_COLLECTION  
  | PARTITION_FUNCTION  
}  

Arguments

schema_name.referenced_entity_name Referans verilen varlığın adı.

schema_name başvuru konusu sınıf PARTITION_FUNCTION olduğu sürece zorunludur.

schema_name.referenced_entity_name nvarchar(517)'dir.

<referenced_class> ::= { OBJECT | TYPE | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION } Referans edilen varlığın sınıfıdır. Her ifadede yalnızca bir sınıf belirtilebilir.

<referenced_class> nvarchar(60)'dır.

Döndürülen Tablo

Sütun adı Veri türü Description
referencing_schema_name sysname Referans varlığın ait olduğu şema. Boş değer atanabilir.

Veritabanı düzeyinde ve sunucu düzeyinde DDL tetikleyicileri için NULL.
referencing_entity_name sysname Referans veren varlığın adı. Null olamaz.
referencing_id int Referans veren varlığın kimliği. Null olamaz.
referencing_class tinyint Referans varlığın sınıfı. Null olamaz.

1 = Nesne

12 = Veritabanı düzeyinde DDL tetikleyicisi

13 = Sunucu düzeyinde DDL tetikleyicisi
referencing_class_desc nvarchar(60) Referans veren varlık sınıfının tanımı.

OBJECT

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER
is_caller_dependent bit Referans verilen varlık kimliğinin çözümlülüğünün çalışma zamanında gerçekleştiğini gösterir çünkü bu durum çağıranın şemasına bağlıdır.

1 = Referans varlığının varlığa referans verme potansiyeli vardır; ancak referans verilen varlık kimliğinin çözümü arayanlara bağlıdır ve belirlenemez. Bu durum yalnızca EXECUTE ifadesinde çağrılan bir depolanmış prosedüre, genişletilmiş bir prosedüre veya kullanıcı tanımlı fonksiyona şema bağlı olmayan referanslar için gerçekleşir.

0 = Referans verilen varlık arayanlara bağlı değildir.

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ık numaralı bir depolanmış prosedür olduğunda hata döndürür.

Açıklamalar

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

SQL Server 2008 (10.0.x) - SQL Server 2012 (11.x)

  • Referans edilen nesne üzerinde CONTROL izni gerektirir. Atıfta bulunulan varlık bir bölüm fonksiyonu olduğunda, veritabanında CONTROL izni gerekir.

  • sys.dm_sql_referencing_entities üzerinde SELECT izni gerekiyor. Varsayılan olarak, SELECT izni herkese verilir.

SQL Server 2014 (12.x) ve sonrası

  • Referans edilen nesne üzerinde izin gerektirmez. Kısmi sonuçlar, kullanıcının yalnızca bazı referans varlıklarında VIEW DEFINITION özelliğine sahipse geri dönebilir.

  • Referans varlığı bir nesne olduğunda nesne üzerinde VIEW DEFINITION gereklidir.

  • Referans varlığı veritabanı düzeyinde bir DDL tetikleyici olduğunda veritabanında VIEW DEFINITION gereklidir.

  • Referans varlığı sunucu düzeyinde bir DDL tetikleyici olduğunda sunucuda VIEW ANY DEFINITION gereklidir.

Örnekler

A. Belirli bir varlığa atıfta bulunan varlıkların geri dönmesi

Aşağıdaki örnek, mevcut veritabanındaki belirlenen tabloya atıfta bulunan varlıkları döndürür.

USE AdventureWorks2022;  
GO  
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
FROM sys.dm_sql_referencing_entities ('Production.Product', 'OBJECT');  
GO  

B. Belirli bir tipe atıfta bulunan varlıkların geri dönmesi

Aşağıdaki örnek, takma ad türüne dbo.Flagreferans veren varlıkları geri getirir. Sonuç kümesi, iki depolanmış prosedürün bu tipi kullandığını gösterir. Tip dbo.Flag , tablodaki birkaç sütunun HumanResources.Employee tanımında da kullanılır; ancak tip tablodaki hesaplanan bir sütun, CHECK kısıtlaması veya DEFAULT kısıtlaması tanımında olmadığından, tablo için satır döndürülmez HumanResources.Employee .

USE AdventureWorks2022;  
GO  
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
FROM sys.dm_sql_referencing_entities ('dbo.Flag', 'TYPE');  
GO  

Sonuç kümesi aşağıdadır.

referencing_schema_name referencing_entity_name   referencing_id referencing_class_desc is_caller_dependent  
----------------------- -------------------------  ------------- ---------------------- -------------------  
HumanResources          uspUpdateEmployeeHireInfo  1803153469    OBJECT_OR_COLUMN       0  
HumanResources          uspUpdateEmployeeLogin     1819153526    OBJECT_OR_COLUMN       0  
(2 row(s) affected)`  

Ayrıca Bkz.

sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)