SPECIFIC COLUMN'a bağımlılıklar bulma (modern yol, sysdepends kullanmadan)


14

Tüm görünümleri ve sadece belirli bir tablo değil, bir tabloda belirli bir sütun tüketen saklı yordamlar bulmak gerekir.

Aşağıdaki "işe yarıyor" gibi görünüyor, ancak bu yönteme dikkat etmek için çok sayıda uyarı var (çeşitli nedenlerle güvenilir değil, yakında kullanımdan kaldırılacak, vb.):

SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName,
(SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type
FROM sysobjects so INNER JOIN syscolumns sc
ON so.id = sc.id
INNER JOIN sysdepends sd
ON so.id = sd.depid and sc.colid = sd.depnumber
WHERE 
    object_name(so.id) = 'MyTableName'
AND sc.name = 'MyColumnName'
order by object_name(so.id), Object_Type

Sıklıkla başvurulan bazı alternatif yaklaşımlar sys.sql_dependencies ve sys.sql_expression_dependencies'dir, ancak bunların hiçbirinde sütun düzeyinde ayrıntı düzeyi yoktur.

Bunu yapmanın bir yolunu bilen var mı? (Ya da kelimenin tam anlamıyla yapılamayacağını kesin olarak biliyor olsanız bile, bilmek yararlı olacaktır.)


1
Bu ipucunun 2. örneği sütun düzeyinde arama içindir.

Yanıtlar:


13

Sütun bağımlılıklarını görüntüleme konusunda bir AdventureWorks örneği.

SELECT ReferencingObject = SCHEMA_NAME(o1.schema_id) + '.' + o1.name,
       ReferencedObject = SCHEMA_NAME(o2.schema_id) + '.'
                          + ed.referenced_entity_name,
       ColumnName = c.name,
       ReferencedObjectType = o2.type,
       ReferencingObjecType = o1.type
FROM   AdventureWorks2012.sys.sql_expression_dependencies ed
       INNER JOIN AdventureWorks2012.sys.objects o1
               ON ed.referencing_id = o1.object_id
       INNER JOIN AdventureWorks2012.sys.objects o2
               ON ed.referenced_id = o2.object_id
       INNER JOIN AdventureWorks2012.sys.sql_dependencies d
               ON ed.referencing_id = d.object_id
                  AND d.referenced_major_id = ed.referenced_id
       INNER JOIN sys.columns c
               ON c.object_id = ed.referenced_id
                  AND d.referenced_minor_id = c.column_id
WHERE  SCHEMA_NAME(o1.schema_id) + '.' + o1.name = 'HumanResources.vEmployee' AND c.name = 'JobTitle'
ORDER  BY ReferencedObject,
          c.column_id; 

Mükemmel görünüyor. Bu AT ALL ya da OLASI Sysdepends aynı "eski, eski" sorunlardan muzdarip olup olmadığını yorumlayabilir misiniz? Bkz: sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/...
tbone

AYRICA: Bunun iç içe bağımlılıkları çözüp çözmeyeceği hakkında bir fikriniz var mı? yani: PROD, TABLO'ya bağlı bir GÖRÜNÜM'e bağlıdır.COLUMN: TABLO ve SÜTUN için ölçütler ayarlarsak, hem görünüm hem de proc sonuçlarda gösterilir mi?
tbone

Koşullara göre hangi amaca hizmet edildiğini anlamıyorum where. TS, belirli bir sütunda bağımlılıkları bulmak istedi. Durumun kısıtlanması gerektiğini düşünüyorum c.nameve ed.referenced_id/ ed.referenced_entity_name, değil mi?
pkuderov

İşte 2019'da - sys.sql_dependenciesşimdi bakım modunda ve Microsoft ekibi sadece kullanılmasını öneriyor sys.sql_expression_dependencies. Bununla birlikte sys.sql_expression_dependencies, aynı düzeyde ayrıntı yakalama gibi görünmüyor .
10762409 diyor Reinstate Monica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.