SQL bağımlılıklar bildirdiği için
SQL bağımlılıklar, bir kullanıcı tarafından tanımlanan bir varlık baþka sayfalarında SQL deyimlerde kullanılan by-name başvurulardır.Örneğin, temel tablo, görünüm veya yordam tarafından döndürülen verileri içeren varlığını görünümler ve saklı yordamlar bağlıdır.Bağımlılık bilgileri bildirdiği, aşağıdaki senaryolarda kullanışlıdır:
Bir modül bir saklı yordam gibi bir uygulamadan diğerine taşıma.
Bir modül taşımadan önce varsa herhangi bir veritabanı veya geçici veritabanı varlıkları birlikte modülü de taşınmalıdır modülü tarafından başvuruda bulunulan belirleyebilirsiniz.
Tanım ekleme veya bir tablodaki bir sütun bırakma gibi varlık değiştiriliyor.
varlık değiştirmeden önce geçerli tanımını varlık bağlı olan diğer varlıklara olup olmadığını belirleyebilirsiniz.Bu bağımlı varlıklar, sorgulanan veya değiştirilmesinden sonra çağrılan beklenmeyen sonuçlar doğurabilir ve meta veriler yenileme işlemini kendi tanımına bir değişiklik gerektiriyor olabilir.
Bir veya daha fazla veritabanlarının bir sunucudan diğerine taşıma.
Başka bir sunucuya veritabanlarını taşımadan önce bir veritabanı varlıklarda varlıkları başka bir veritabanında bulunan bağımlılıklar yüklü olup olmadığını belirleyebilirsiniz.Bu şekilde, aynı sunucuya bu veritabanlarını taşımak için biliyor.
Yerine çalışma birden çok veritabanına yayılmış uygulamalar için yapılandırma.
Istediğiniz uygulamanın tüm saatler ve kullanmak yerine çalışma stratejinizin veritabanı yansıtması kullanılabilir olduğundan emin olun.Uygulama hakkında daha fazla veritabanı bağlıdır ve emin olmak istediğinizde uygulamayı başarıyla onu çalıştırabilirsiniz, yerine yansıtma sunucusu çalıştırır.Works veritabanı düzeyinde yansıtma için hangi veritabanlarının yansıtma tümünün için ayrı ayrı küme, uygulamanın kritik olduğunu belirlemek gerekir.Sonra tüm veritabanları üzerinde birlikte, böylece uygulamanın yansıtmayı sunucuda çalıştığından emin olduktan başarısız olduğunu sağlayabilirsiniz.
Varlıkları dağıtılmış sorgular four-part adları kullanılarak çalıştırılacak uygulamayı bulma.
Bağlantılı sunucuları Dağıtılmış sorgularda kullanılan öğrenmek istiyorsunuz.
Arayanın bağımlı başvurular ya da tek parça ad başvurular içeren bir uygulamada kullanılan varlıkları bulma.
Bir uygulamayı dağıtmadan önce uygulama tarafından kullanılan varlıkları arayanın bağımlı başvurularını veya yalnızca bir tek parça ad olarak kullanarak varlıkları başvurular içeren belirleyebilirsiniz.Bu tür başvurularını düşük programlama uygulamalarını belirtmek ve uygulama dağıtıldığında beklenmedik davranışa neden.Bunun nedeni, arayanın şemada başvurulan varlık (bağlama) çözümlemesi bağlıdır ve bu bilgileri kadar çalışma saat belirlenen olmasıdır.Bu başvuruları bulma sonra sorguları gibi uygun çok parçalı ad belirterek düzeltilebilir schema_name.object_name.
SQL bağımlılıkları hakkında daha fazla bilgi için bkz: SQL Bağımlılıklar'ı anlama.
Sistem görünümler ve işlevler'i kullanarak bağımlılıklar bildirdiği için
SQL bağımlılıkları görüntülemek için SQL Server 2008 sys.sql_expression_dependencies Katalog görünümü ve sys.dm_sql_referenced_entities sys.dm_sql_referencing_entities Dinamik yönetim işlevleri sağlar. Bu nesnelerin bağımlılık bilgilerini kullanıcı tanımlı varlıkları dönmek için sorgulayabilirsiniz.
SQL bağımlılıkları da kullanılarak görüntülenebilir Görünüm bağımlılıklar in SQL Server Management Studio. Daha fazla bilgi için bkz:Nasıl Yapılır: Görünüm SQL bağımlılıklar (SQL Server Management Studio'yu).
Katalog görünüm sys.sql_expression_dependencies kullanma
The sys.sql_expression_dependencies catalog view provides the database owner or veritabanı yöneticisi with the ability to report dependency information for a given database.Bu görünümü kullanarak, aşağıdaki gibi genel sorulara yanıt verebilir:
Hangi siteler için sunucu veya veritabanları arası bağımlılıkları veritabanının var mı?
Hangi bağımlılıklar, veritabanı içinde bulunuyor?
Veritabanını hangi varlıklarda arayanın bağımlı başvuru var mı?
Hangi sunucu düzey veya veritabanı düzey DDL Tetikleyicileri varlıkları veritabanındaki bağımlılıklar vardır?
Hangi modüller veritabanında kullanıcı tanımlı tür (UDT) kullanılsın mı?
sys.sql_expression_dependencies aşağıdaki sınırlandırmaları vardır:
Yalnızca geçerli four-part veya üç bölümlü adı belirtildiğinde geçici sunucu ve veritabanları arası bağımlılıkları döndürülür.Kimlikler başvurulan varlıklar için döndürülür.
Sütun düzeyinde bağımlılıklar, yalnızca şemaya bağlı varlıklar için raporlanır.
The sys.dm_sql_referenced_entities kullanarak dinamik yönetim işlev
The sys.dm_sql_referenced_entities işlev returns one row for each user-defined varlık referenced by name in the definition of the specified referencing varlık.Başvuru Varlık, bir kullanıcı tarafından tanımlanan bir nesne, sunucu düzeyinde DDL tetikleyicisi veya veritabanı düzey DDL tetikleyicisi olabilir.Bu sys.sql_expression_dependencies tarafından döndürülen bilgileri aynı, ancak sonuç kümesi belirtilen başvuru varlık tarafından başvurulan varlıklara sınırlıdır.Bu işlev, bağımlılıklar, GÖRÜNÜM TANıMıNı iznine sahip oldukları ya da sahip oldukları modülleri izlemek isteyen geliştiriciler için yararlıdır.
The sys.dm_sql_referencing_entities kullanarak dinamik yönetim işlev
The sys.dm_sql_referencing_entities işlev returns one row for each user-defined varlık in the current database that references another user-defined varlık by name.Başvuru Varlık, bir kullanıcı tarafından tanımlanan bir nesne, türü (diğer ad veya CLR UDT), XML şema koleksiyon veya bölüm işlev olabilir.Bu işlev, sahip oldukları varlıkları üzerinde bağımlılıkları izlemek isteyen geliştiriciler için yararlıdır.Değiştirme, önce bir kullanıcı tanımlı tür, bir uygulama geliştiricisi, veritabanında bu türüne bağlı olan tüm varlıklar belirlemek için bu işlev kullanabilirsiniz.hesaplanan sütun, CHECK kısıtlaması veya VARSAYıLAN kısıtlama tanımı, türü belirtilmedikçe tablo kullanıcı tanımlı bir türe başvuru raporlanır unutmayın.
Örnekler
Aşağıdaki örnekler, sys.sql_expression_dependencies Katalog görünümü ve sys.dm_sql_referenced_entities ve sys.dm_sql_referencing_entities Dinamik yönetim işlevlerini kullanarak SQL bağımlılıklar döndürür.
Hangi üzerinde belirtilen bir varlık bağlı varlıkları bildirdiği için
Sys.sql_expression_dependencies Katalog görünümü veya sys.dm_sql_referenced_entities dinamik yönetimi işlevin bağımlı olduğu belirtilen bir varlık, varlıklar listesini sorgulayabilirsiniz.Örneğin, bir saklı yordam veya tetikleyiciyi gibi bir modüle başvuru varlık listesi dönebilirsiniz.
Aşağıdaki örnek, bir tablo, görünüm ve üç saklı yordamlar oluşturur.Bu nesneler, sonraki sorgularda, nasıl yapılır: bağımlılık bilgilerini rapor göstermek için kullanılır.Inceleyin. MyView ve MyProc3 Her iki başvuru Mytable. MyProc1 başvuru MyView, ve MyProc2 Başvurular MyProc1.
Aşağıdaki örnek sys.sql_expression_dependencies Katalog görünümü'tarafından başvurulan varlıkları dönmek için sorgular. MyProc3.
Here is the result set.
referencing_entity sunucu_adı veritabanı_adı schema_name referenced_entity
------------------ ----------- ------------- ----------- -----------------
NULL MyProc3 NULL dbo MyProc2
NULL AdventureWorks MyProc3 dbo Tablom
(2 satırları etkilenen)
Iki varlık by-name tanımında başvuruyor. MyProc3 döndürülür. Sunucu adı NULL olduğundan başvurulan varlıkları four-part geçerli bir ad kullanarak belirtilmedi.Veritabanı adı gösterilir MyTable Varlık, üç bölümlü geçerli bir ad kullanarak yordamında tanımlanmadığı için.
Benzer bilgiler sys.dm_sql_referenced_entities kullanarak döndürülebilir.Nesne adları bildirdiği yanı sıra, bu işlev şemaya bağlı hem de dışındaki-şemaya bağlı varlıkları sütun düzey bağımlılıklar dönmek için kullanılır.Aşağıdaki örnek, varlıkları verir MyProc3 sütun-bağlıdır düzey bağımlılıklar.
Here is the result set.
sunucu_adı veritabanı_adı schema_name referenced_entity sütun_adı
----------- ----------------- ----------- ----------------- -----------
BOŞ (NULL dbo MyProc2 NULL
NULL AdventureWorks dbo Tablom NULL
NULL AdventureWorks dbo Tablom c1
NULL AdventureWorks dbo Tablom c2
(4 satırları etkilenen)
Bu sonuç küme aynı olan iki varlık verilir, ancak, iki satır sütunlarda bağımlılık gösteren döndürülür c1 ve c2 içinde MyTable. Tanımı içinde dikkat edin MyProc3, bir SELECT * sütunlarda başvuracak biçimde deyim kullanıldı MyTable. Bu önerilen bir kodlama yöntemi değildir; ancak, sütun düzey bağımlılıklar hala tarafından izlenen Database Engine.
Bu noktaya kadar bir varlıkla doğrudan bağımlı olduğu varlıkları almayı örneklerde gösterildiği.Aşağıdaki örnek, varlık doğrudan ve dolaylı tüm bağımlılıkları dönmek için bir özyinelemeli ortak tablo ifade (CTE) kullanır.
Here is the result set.
varlýk_adý referenced_schema referenced_entity düzey
----------- ----------------- ----------------- -----
MyProc3 dbo MyProc2 0
MyProc3 dbo Tablom 0
MyProc2 dbo MyProc1 1
MyProc1 dbo MyView 2
MyView dbo Tablom 3
(5 satırları etkilenen)
Bu sonuç küme, MyProc2 ve MyTable Düzey 0 değeriyle gösterildiği gibi doğrudan bağımlılıklarını döndürülür. Üçüncü satırda dolaylı bağımlılık gösterir MyProc1, tanımı içinde başvuruda bulunulan MyProc2. Dördüncü satırda bağımlılığını gösterir MyView, tanımı içinde başvuruda bulunulan MyProc1 ve son olarak, bir bağımlılık MyTable, tanımı içinde başvuruda bulunulan MyView.
Sıradüzensel bir bağımlılık bilgilerini döndürerek, verilen bir varlık doğrudan ve dolaylı bağımlılıkları tam listesini belirlemek ve başka bir veritabanına taşınacak gerekiyorsa, bu nesnelerin dağıtılmasını sırayı algılayın.
Aşağıdaki örnek, sys.dm_sql_referenced_entities kullanarak aynı hiyerarşik bir bağımlılık bilgilerini verir işlev.Varlıkları MyProc3 bağlı sütun düzey bağımlılıklar gibi döndürülür.
Belirtilen bir varlık üzerinde bağımlı olduğu varlıkları üzerinde bildirdiği için
Sorgu yürütebilir sys.sql_expression_dependencies kataloğunu görüntüleme ya dasys.dm_sql_referencing_entities dinamik yönetim işlev üzerinde belirtilen varlık bağımlı varlıkların listesini geri dönün.Belirtilen varlık bir tablo, örneğin, tanım adını yazarak bu tabloya başvuran tüm varlıklar döndürdü.
Aşağıdaki örnek, varlık başvuru varlık verir... dbo.MyTable.
Benzer bilgiler sys.dm_sql_referenced_entities dinamik yönetimi işlevini kullanarak döndürülebilir.
Sütun-CVE-2006-düzey bağımlılıklar bildirdiği için
Sütun düzeyinde bağımlılıklar, şemaya bağlı hem de dışındaki-şemaya bağlı varlıklar için sys.dm_sql_referenced_entities kullanarak raporlanabilir.Şemaya bağlı varlıkları sütun düzey bağımlılıkları sys.sql_expression_dependencies kullanarak da raporlanabilir.
Aşağıdaki örnek, sys.dm_sql_referenced_entities rapor sütun düzey bağımlılıkları olmayan-şemaya bağlı varlıklar için sorgular.Örnekte ilk oluşturur Table1 ve Table 2 ve saklı yordam Proc1. Yordamı sütunları başvuruyor. b ve c içinde Table1 ve sütun c2 içinde Table2. Görünümü sys.dm_sql_referenced_entities başvuru varlık olarak belirtilen saklı yordamı çalıştırın. sonuç kümesi başvurulan varlıklar için bir satır içerir. Table1 ve Table2 ve saklı yordam tanımında başvurulan sütunları. Tablolara başvuran satırları sütun_adı sütununa NULL döndürdü dikkat edin.
Here is the result set.
referenced_id table_name, sütun_adı
------------- ----------- -------------
151671588 NULL Table1
151671588 Table1 b
151671588 Table1 c
2707154552 NULL Table2
2707154552 Table2 c2
Siteler için sunucu ve geçici veritabanı bağımlılıklar bildirdiği için
varlık başka bir varlığa başvuru yaptığında, üç bölümlü geçerli bir ad kullanarak geçici veritabanı bağımlılık oluşturulur.Sunucu çapraz başvuru, bir varlık four-part geçerli bir ad kullanarak başka bir varlığa başvuru yaptığında oluşturulur.Sunucu ve veritabanı adını yalnızca adı açıkça belirtildiği zaman kaydedilir.Örneğin, olarak belirtildiğinde MyServer.MyDB.MySchema.MyTable, sunucu ve veritabanı adlarını kaydedilir; ancak olarak belirtildiğinde MyServer..MySchema.MyTable, yalnızca sunucu adı kaydedilir. Siteler için sunucu ve veritabanları arası bağımlılıkları izlenir hakkında daha fazla bilgi için bkz: SQL Bağımlılıklar'ı anlama.
Geçici veritabanı ve siteler için sunucu bağımlılıkları sys.sql_expression_dependencies veya sys.dm_sql_referenced_entitites raporlanabilir.
Aşağıdaki örnek, tüm veritabanları arası bağımlılıkları verir.Örnek veritabanını ilk oluşturur. db1 ve veritabanlarındaki tablolara başvuran iki saklı yordamlar db2 ve db3. The sys.sql_expression_dependencies tablo is then queried to report the cross-database dependencies between the procedures and the tables. NULL döndürdü bildirimi referenced_schema_name Başvurulan varlık için sütun t3 Bu varlığın yordamın tanımında bir şema adı belirtilmiş olduğundan.
Arayanın Dependent References bildirdiği için
Arayanın bağımlı başvurusu başvurulan varlığın şema bağlama, zamanında oluşur; bu nedenle, çözümleme varlık kimliği, arayanın varsayılan şemada bağlıdır.Bu genellikle olarak adlandırılır dinamik bir şema cilt payı ve başvurulan varlık genişletilmiş saklı yordam, bir saklı yordam veya bir şema adı belirtmeden bir yürütmek deyim olmayan-şemaya bağlı kullanıcı tanımlı bir işlev olarak adlandırılan oluşur.Örneğin, biçimdeki bir varlık başvurusu EXECUTE MySchema.MyProc Arayanın bağımlı değildir; ancak, başvuru biçimi EXECUTE MyProc Arayanın bağlıdır.
Modülü içinde başvuruda bulunulan yürütüldüğünde arayanın bağımlı başvuruları beklenmeyen davranışlara neden olabilir.Örneğin, bir tek parça ad kullanılarak bir yordamın başvuran saklı yordamını, göz önünde bulundurun.
Ne zaman Proc1 , yürütüldü Proc2 Arayanın şemaya bağlar. Varsayalım. Proc1 tarafından çalıştırılan User1, bir varsayılan şema, izni olan kişiler S1 ve tarafından yürütülen User2, bir varsayılan şema, izni olan kişiler S2. Ne zaman Proc1 tarafından çalıştırılan User1, başvurulan varlık çözümler S1.Proc2. Ne zaman Proc1 tarafından çalıştırılan User2, başvurulan varlık çözümler S2.Proc2. Bu davranış nedeniyle, KIMLIĞI Proc2 kadar çözümlenemiyor Proc1 yürütülür; bu nedenle is_caller_dependent sütun 1 sys.sql_expression_dependencies görünümü ve sys.dm_sql_referenced_entities işlev olarak küme. Ne zaman Proc1 yürütüldüğünde, Database Engine Başvurulan varlık için görünür Proc2 Arayanın varsayılan şema. Bulunamazsa, dbo şema denetlenir.If Proc2 dbo şemada KIMLIĞI bulunamıyor Proc2 çözümlenemeyen ve deyim başarısız olur. Olası uygulama hatalarını engellemek için veritabanı varlıkları başvururken iki parça adlarını belirterek yüklemenizi öneririz.
Aşağıdaki örnek, her döndürür varlık geçerli veritabanında arayan bağımlı başvuru içeriyor.
Belirtilen bir UDT Kullan varlıkları üzerinde bildirdiği için
Aşağıdaki örnek, belirtilen tür, tanımında başvuran geçerli veritabanındaki her bir varlýk verir.Sonuç küme iki saklı yordamda bu türünü kullandığını gösterir.Türü de birkaç sütun tanımı kullanılır HumanResources.Employee Tablo; tür tanımında bir hesaplanmış sütunu, CHECK kısıtlaması veya tablosundaki VARSAYıLAN kısıtlamayı, olduğundan, satır için tablo ancak döndürdü.
Server-Tetik bağımlılıklar düzey DDL bildirdiği için
Sunucu-CVE-2006-düzey DDL Tetikleyicileri bağımlılıkları, içerik yöneticisi veritabanına ayarlandığında sys.sql_expression_dependencies ve sys.dm_sql_referencing_entities kullanarak rapor edebilirsiniz.Sys.dm_sql_referenced_entities işlev kullanılarak içerik veritabanlarının olabilir.
The following example queries the sys.sql_expression_dependenciesview to report on server-level DDL trigger dependencies.
See Also