sys.sql_expression_dependencies (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft FabricAmbarı'nda SQL analiz uç noktası

Geçerli veritabanındaki kullanıcı tanımlı bir varlığa her ada göre bağımlılık için bir satır içerir. Bu, yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler ve diğer SQL Server modülleri arasındaki bağımlılıkları içerir. başvurulan varlıkadlı bir varlık başka bir varlığın kalıcı SQL ifadesinde ada göre göründüğünde (başvuran varlık ) iki varlık arasındaki bağımlılık oluşturulur. Örneğin, bir görünümün tanımında bir tabloya başvurulduğunda, başvuruda bulunan varlık olarak görünüm, başvuruda bulunılan varlık olan tabloya bağlıdır. Tablo bırakılırsa görünüm kullanılamaz.

Daha fazla bilgi için bkz. In-Memory OLTPiçin Skaler User-Defined İşlevleri .

Aşağıdaki varlıklara yönelik bağımlılık bilgilerini raporlamak için bu katalog görünümünü kullanabilirsiniz:

  • Şemaya bağlı varlıklar.

  • Şemaya bağlı olmayan varlıklar.

  • Veritabanları arası ve sunucular arası varlıklar. Kuruluş isimleri bildirilir; ancak varlık kimlikleri çözülmez.

  • Şemaya bağlı varlıklardaki sütun düzeyinde bağımlılıklar. Şemaya bağlı olmayan nesneler için sütun düzeyinde bağımlılıklar sys.dm_sql_referenced_entitieskullanılarak döndürülebilir.

  • Sunucu düzeyinde DDL, veritabanı master bağlamında tetiklenir.

Sütun adı Veri tipi Açıklama
referencing_id int Başvuran varlığın kimliği. Null değeri atanamaz.
referencing_minor_id int Başvuran varlık bir sütun olduğunda sütun kimliği; aksi takdirde 0. Null değeri atanamaz.
referencing_class tinyint Başvuran varlığın sınıfı.

1 = Nesne veya sütun
12 = Veritabanı DDL tetikleyicisi
13 = Sunucu DDL tetikleyicisi

Null değeri atanamaz.
referencing_class_desc nvarchar(60) Başvuran varlık sınıfının açıklaması.

OBJECT_OR_COLUMN
DATABASE_DDL_TRIGGER
SERVER_DDL_TRIGGER

Null değeri atanamaz.
is_schema_bound_reference bit 1 = Referans verilen varlık şema sınırlıdır.
0 = Referans edilen varlık şema sınırı değildir.

Null değeri atanamaz.
referenced_class tinyint Başvuruda bulunılan varlığın sınıfı.

1 = Nesne veya sütun
6 = Tip
7 = Indeks
10 = XML şema koleksiyonu
21 = Bölme fonksiyonu

Null değeri atanamaz.
referenced_class_desc nvarchar(60) Başvuruda bulunılan varlığın sınıfının açıklaması.

OBJECT_OR_COLUMN
TYPE
INDEX
XML_SCHEMA_COLLECTION
PARTITION_FUNCTION

Null değeri atanamaz.
referenced_server_name sysname Başvuruda bulunılan varlığın sunucusunun adı.

Bu sütun, geçerli bir dört bölümlü ad belirtilerek yapılan sunucular arası bağımlılıklar için doldurulur. Çok bölümlü adlar hakkında bilgi için bkz.Transact-SQL söz dizimi kuralları.

NULL Dört parçalı bir isim belirtilmeden referans verilen şema bağlı olmayan varlıklar için.

NULL şema bağlı varlıklar için aynı veritabanında olmaları gerekir ve bu nedenle yalnızca iki parçalı (şema.nesne) adıyla tanımlanabilirler.
referenced_database_name sysname Başvuruda bulunılan varlığın veritabanının adı.

Bu sütun, geçerli bir üç bölümlü veya dört parçalı ad belirtilerek yapılan veritabanları arası veya sunucular arası başvurular için doldurulur.

NULL şema sınırı olmayan referanslar için, bir veya iki parçalı bir isim kullanılarak belirtildiğinde.

NULL şema bağlı varlıklar için çünkü aynı veritabanında olmaları gerekir ve bu nedenle yalnızca iki bölümlü bir (şema.nesne) isim.
referenced_schema_name sysname Başvurulan varlığın ait olduğu şema.

NULL şema adı belirtilmeden varlığa referans verilen şema sınırı olmayan referanslar için.

Şema bağlı referanslar için asla olmaz NULL çünkü şema bağlı varlıklar iki parçalı bir isim kullanılarak tanımlanmalı ve referanslandırılmalıdır.
referenced_entity_name sysname Başvuruda bulunılan varlığın adı. Null değeri atanamaz.
referenced_id int Başvuruda bulunılan varlığın kimliği. Bu sütunun değeri asla NULL şema bağlı referanslar için değildir. Bu sütunun değeri her zaman NULL sunucular arası ve veritabanları çapraz referanslar içindir.

NULL kimlik belirlenemiyorsa veritabanındaki referanslar için. Şema bağlı olmayan referanslar için, ID aşağıdaki durumlarda çözülemez:

Referans verilen varlık veritabanında yok.

Başvuruda bulunulan varlığın şeması, çağıranın şemasına bağlıdır ve çalışma zamanında çözümlenir. Bu durumda, is_caller_dependent 1 olarak ayarlanır.
referenced_minor_id int Başvuran varlık bir sütun olduğunda başvuruda bulunılan sütunun kimliği; aksi takdirde 0. Null değeri atanamaz.

Başvuruda bulunılan varlık, başvuruda bulunan varlıkta bir sütun ada göre tanımlandığında veya üst varlık select * deyiminde kullanıldığında bir sütundur.
is_caller_dependent bit Başvuruda bulunılan 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ü çağıranın şemasına bağlıdır. Başvurulan varlık bir saklı yordam, genişletilmiş saklı yordam veya EXECUTE deyiminde çağrılan şemaya bağlı olmayan kullanıcı tanımlı bir işlev olduğunda bu durum oluşur.

1 = Referans edilen varlık arayanlara bağlıdır ve çalışma zamanında çözülür. Bu durumda, referenced_id .NULL

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

Şemaya bağlı başvurular için ve açıkça bir şema adı belirten veritabanları arası ve sunucular arası başvurular için her zaman 0. Örneğin, formatta EXEC MyDatabase.MySchema.MyProc bir varlığa yapılan bir referans arayana bağlı değildir. Ancak, EXEC MyDatabase..MyProc biçimindeki bir başvuru çağırana bağımlı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, SELECT Sales.GetOrder() FROM Sales.MySales deyiminin bir saklı yordamda tanımlandığını varsayalım. Saklanan prosedür yürütülene kadar, şemada kullanıcı tanımlı bir fonksiyon Sales mu yoksa UDT tipi bir GetOrder()yöntemle adlandırılan bir sütun Sales mu olduğu Sales.GetOrder() bilinmez.

1 = Referans belirsizdir.

0 = Referans kesindir veya görünüm çağrıldığında varlık başarılı şekilde bağlanabilir.

Şema bağlı başvuruları için her zaman 0.

Açıklamalar

Aşağıdaki tabloda, bağımlılık bilgilerinin oluşturulduğu ve korundığı varlık türleri listelenmiştir. Bağımlılık bilgisi kurallar, varsayılanlar, geçici tablolar, geçici depolanmış prosedürler veya sistem nesneleri için oluşturulmaz veya korunmaz.

Not

Azure Synapse Analytics ve Paralel Veri Ambarı bu listeden tabloları, görünümleri, filtrelenmiş istatistikleri ve Transact-SQL saklı yordam varlık türlerini destekler. Bağımlılık bilgileri yalnızca tablolar, görünümler ve filtrelenmiş istatistikler için oluşturulur ve korunur.

Varlık türü Varlık başvuruyor Başvuruda bulunılan varlık
Masa Yes1 Evet
Görünüm Evet Evet
Filtrelenmiş dizin Evet2 Hayır
Filtrelenmiş istatistikler Evet2 Hayır
Transact-SQL Saklanan prosedür3 Evet Evet
CLR saklı yordamı Hayır Evet
Kullanıcı tanımlı işlevi Transact-SQL Evet Evet
CLR kullanıcı tanımlı işlevi Hayır Evet
CLR tetikleyicisi (DML ve DDL) Hayır Hayır
DML tetikleyicisi Transact-SQL Evet Hayır
veritabanı düzeyinde DDL tetikleyicisi Transact-SQL Evet Hayır
sunucu düzeyinde DDL tetikleyicisi Transact-SQL 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 koleksiyonu Hayır Evet
Partition işlevi Hayır Evet

1 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.

2 Filtre önleminde kullanılan her sütun, bir referans varlık olarak takip edilir.

3 Tam sayı değeri 1'den büyük olan numaralı saklanan prosedürler ne referans veren ne de referans alan bir varlık olarak takip edilmez.

İzinler

Veritabanında DEFINITION izni ve veritabanı için sys.sql_expression_dependencies SELECT izni gerektirirVIEW. Varsayılan olarak, SELECT izni yalnızca db_owner sabit veritabanı rolünün üyelerine verilir. Select ve VIEW DEFINITION izinleri başka bir kullanıcıya verildiğinde, veren veritabanındaki tüm bağımlılıkları görüntüleyebilir.

Örnekler

A. Başka bir varlık tarafından referans verilen iade varlıkları

Aşağıdaki örnek, Production.vProductAndDescriptiongörünümde başvuruda bulunan tabloları ve sütunları döndürür. Görünüm, referenced_entity_name ve referenced_column_name sütunlarında döndürülen varlıklara (tablolar ve sütunlar) bağlıdır.

USE AdventureWorks2022;
GO

SELECT
    OBJECT_NAME(referencing_id) AS referencing_entity_name,
    o.type_desc AS referencing_description,
    COALESCE (COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,
    referencing_class_desc,
    referenced_server_name,
    referenced_database_name,
    referenced_schema_name,
    referenced_entity_name,
    COALESCE (COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,
    is_caller_dependent,
    is_ambiguous
FROM sys.sql_expression_dependencies AS sed
    INNER JOIN sys.objects AS o
        ON sed.referencing_id = o.object_id
WHERE referencing_id = OBJECT_ID(N'Production.vProductAndDescription');

B. Başka bir varlığa referans veren iade varlıklar

Aşağıdaki örnek, Production.Producttabloya başvuran varlıkları döndürür. referencing_entity_name sütununda döndürülen varlıklar Product tablosuna bağlıdır.

USE AdventureWorks2022;
GO

SELECT
    OBJECT_SCHEMA_NAME(referencing_id) AS referencing_schema_name,
    OBJECT_NAME(referencing_id) AS referencing_entity_name,
    o.type_desc AS referencing_description,
    COALESCE (COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,
    referencing_class_desc,
    referenced_class_desc,
    referenced_server_name,
    referenced_database_name,
    referenced_schema_name,
    referenced_entity_name,
    COALESCE (COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,
    is_caller_dependent,
    is_ambiguous
FROM sys.sql_expression_dependencies AS sed
    INNER JOIN sys.objects AS o
        ON sed.referencing_id = o.object_id
WHERE referenced_id = OBJECT_ID(N'Production.Product');

C. Veritabanları çapraz bağımlılıkları döndür

Aşağıdaki örnek tüm veritabanları arası bağımlılıkları döndürür. Örnek ilk olarak veritabanı db1 ve db2 ve db3veritabanlarındaki tablolara başvuran iki saklı yordam oluşturur. daha sonra sys.sql_expression_dependencies tablosu, yordamlar ve tablolar arasındaki veritabanları arası bağımlılıkları raporlamak için sorgulanır. NULLbaşvurulan varlık t3 için sütunda dönerreferenced_schema_name, çünkü prosedürün tanımında o varlık için şema adı belirtilmemiştir.

CREATE DATABASE db1;
GO

USE db1;
GO

CREATE PROCEDURE p1 AS
SELECT * FROM db2.s1.t1;
GO

CREATE PROCEDURE p2 AS
UPDATE db3..t3
SET c1 = c1 + 1;
GO

SELECT
    OBJECT_NAME(referencing_id),
    referenced_database_name,
    referenced_schema_name,
    referenced_entity_name
FROM sys.sql_expression_dependencies
WHERE referenced_database_name IS NOT NULL;
GO

USE master;
GO

DROP DATABASE db1;