Aracılığıyla paylaş


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. Varlık adları bildirilir; ancak varlık kimlikleri çözümlenmez.

  • Ş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, ana veritabanı bağlamında olduğunda tetikler.

Sütun adı Veri tipi Açıklama
referencing_id int Başvuran varlığın kimliği. Null değer atanamaz.
referencing_minor_id int Başvuran varlık bir sütun olduğunda sütun kimliği; aksi takdirde 0. Null değer 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ğer 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ğer atanamaz.
is_schema_bound_reference bit 1 = Başvuruda bulunılan varlık şemaya bağlıdır.

0 = Başvurulan varlık şemaya bağlı değil.

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

1 = Nesne veya sütun

6 = Tür

10 = XML şema koleksiyonu

21 = Bölüm işlevi

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

OBJECT_OR_COLUMN

TÜR

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

Null değer 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ı.

Dört parçalı bir ad belirtilmeden varlığa başvurulan şemaya bağlı olmayan varlıklar için NULL.

Aynı veritabanında olmaları gerektiğinden ve bu nedenle yalnızca iki parçalı (schema.object) adı kullanılarak tanımlanabilir olduğundan şemaya bağlı varlıklar için NULL.
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.

Tek parçalı veya iki parçalı bir ad kullanılarak belirtildiğinde şemaya bağlı olmayan başvurular için NULL.

Aynı veritabanında olmaları gerektiğinden ve bu nedenle yalnızca iki parçalı (schema.object) adı kullanılarak tanımlanabilir olduğundan şemaya bağlı varlıklar için NULL.
referenced_schema_name sysname Başvurulan varlığın ait olduğu şema.

Şema adı belirtilmeden varlığa başvurulan şemaya bağlı olmayan başvurular için NULL.

Şemaya bağlı varlıkların iki parçalı bir ad kullanılarak tanımlanması ve başvurulması gerektiğinden, şemaya bağlı başvurular için hiçbir zaman NULL olmaz.
referenced_entity_name sysname Başvuruda bulunılan varlığın adı. Null değer atanamaz.
referenced_id int Başvuruda bulunılan varlığın kimliği. Şemaya bağlı başvurular için bu sütunun değeri hiçbir zaman NULL değildir. Bu sütunun değeri, sunucular arası ve veritabanları arası başvurular için her zaman NULL'tır.

Kimlik belirlenemiyorsa veritabanı içindeki başvurular için NULL. Şemaya bağlı olmayan başvurular için kimlik aşağıdaki durumlarda çözümlenemez:

Başvuruda bulunılan 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ğer 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 = Başvuruda bulunulan varlık çağıran bağımlıdır ve çalışma zamanında çözümlenir. Bu durumda referenced_id NULL olur.

0 = Başvuruda bulunılan varlık kimliği çağıran bağımlı 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, EXEC MyDatabase.MySchema.MyProc biçimindeki bir varlığa başvuru, çağırana bağımlı değildir. Ancak, EXEC MyDatabase..MyProc biçimindeki bir başvuru çağırana bağımlıdır.
is_ambiguous bit Başvurunun belirsiz olduğunu ve çalışma zamanında kullanıcı tanımlı bir işleve, kullanıcı tanımlı türe (UDT) veya xmltüründe bir sütuna yönelik xquery başvurusuna çözümlenebileceğini gösterir.

Örneğin, SELECT Sales.GetOrder() FROM Sales.MySales deyiminin bir saklı yordamda tanımlandığını varsayalım. Saklı yordam yürütülene kadar, Sales.GetOrder()GetOrder()adlı bir yöntemle UDT türünde Sales adlı Sales şemasında veya sütununda kullanıcı tanımlı bir işlev olup olmadığı bilinmez.

1 = Başvuru belirsiz.

0 = Başvuru belirsizdir veya görünüm çağrıldığında varlık başarıyla 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. Kurallar, varsayılanlar, geçici tablolar, geçici saklı yordamlar veya sistem nesneleri için bağımlılık bilgileri 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 Evet* Evet
Görünüm Evet Evet
Filtrelenmiş dizin Evet** Hayır
Filtrelenmiş istatistikler Evet** Hayır
Transact-SQL saklı yordam** 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

* Tablo yalnızca hesaplanan sütun, CHECK kısıtlaması veya DEFAULT kısıtlaması tanımında bir Transact-SQL modülüne, kullanıcı tanımlı türe veya XML şema koleksiyonuna başvurduğunda başvuran varlık olarak izlenir.

** Filtre koşulunda kullanılan her sütun, başvuran varlık olarak izlenir.

1'den büyük bir tamsayı değerine sahip numaralandırılmış saklı yordamlar, başvuran veya başvurulan varlık olarak izlenmez.

İzinler

Veritabanında VIEW DEFINITION izni ve veritabanı için sys.sql_expression_dependencies üzerinde SELECT izni gerektirir. 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 başvuruda bulunulan varlıkları döndürme

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');  
GO  
  

B. Başka bir varlığa başvuran varlıkları döndürme

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');  
GO  
  

C. Veritabanları arası bağımlılıkları döndürme

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. Başvuruda bulunulan varlık t3 için referenced_schema_name sütununda NULL döndürüldüğünü, çünkü yordamın tanımında bu varlık için bir şema adı belirtilmediğinden dikkat edin.

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;  
GO  
  

Ayrıca Bkz.

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