SQL bağımlılıklar anlama

sql bağımlılıkları varlık başka varlık sayfalarında olun sql deyimleri kullanılan by-name başvurulardır.Başka bir varlık tanımına başvurur ve tanım sistem kataloğunda depolanan bir varlık olarak adlandırılan bir varlık başvuran.Başka bir varlık tarafından başvurulan bir varlık olarak adlandırılan bir başvurulan varlık.İki tür bağımlılık tarafından izlenen Veritabanı Altyapısı.

  • Şemaya bağlı bağımlılık

    Şemaya bağlı bağımlılık başvurulan varlık başvuru varlık bulunmadığı sürece değiştirilmiş veya bırakılan engeller iki varlık arasında bir ilişkidir.Bağımlılık şemaya bağlı görünüm veya kullanıcı tanımlı bir işlev ile ema BALAMA yan tümce tümce tümce kullanılarak oluşturulduğunda oluşturulur.Bir tablo başka bir varlık gibi başvurduğunda bir şemaya bağlı bağımlılık de oluşturulabilir bir Transact-SQL kullanıcı tanımlı bir işlev, kullanıcı tanımlı tür, ya da xml şema koleksiyonu, bir onay veya default kısıtlaması veya tanımında, hesaplanan sütun.İki parçalı kullanarak nesneyi belirtme (schema_name.object_name) adı bir şemaya bağlı referans olarak nitelemek değil.

  • Şema-bağlı olmayan bağımlılık

    Şema-bağlı olmayan bağımlılık bırakılan veya değiştirilmiş başvurulan varlık engelleyen iki varlık arasında bir ilişkidir.

sql bağımlılığı örneği aşağıda gösterilmiştir.

SQL bağımlılığı gösterimi

Aşağıdaki çizimde iki varlık vardır: yordam x ve y yordamı.Yordam x içeren bir SQL ifadesi , yordama y by-name başvuruda bulunuyor.Başvuru varlık olarak bilinen bir yordam x ve y yordamda başvurulan varlık olarak bilinir.y yordamı yordam x değişir, yordam x bir çalışma - ile başarısız olacaktır, çünküsaat yordam y yoksa hata.Ancak, yordam x yoksa y yordamı başarısız olur.

Nasıl saklı yordam aşağıdaki örnekte gösterildiği X saklı yordam bağlıdır Y.

USE tempdb;
GO
CREATE PROCEDURE dbo.Y AS
SELECT * FROM sys.objects
GO
CREATE PROCEDURE dbo.X as
    EXEC dbo.Y;
GO

Bağımlılığını görmek için X , Y, Çalıştır aşağıdaki sorgu.

SELECT * 
FROM sys.sql_expression_dependencies 
WHERE referencing_id = OBJECT_ID('X')
    AND referenced_id = OBJECT_ID('Y')
    AND referenced_schema_name = 'dbo'
    AND referenced_entity_name = 'Y'
    AND referenced_database_name IS NULL
    AND referenced_server_name IS NULL;
GO

Başvuru ve başvurulan varlıkları türleri

Aşağıdaki tablo için hangi Bağımlılık bilgilerinin oluşturulduğu ve tutulan varlıklar türlerini listeler.Varlık başvuru varlık veya başvurulan varlık olarak izlenen tablo belirtir.Bağımlılık bilgilerini oluşturulan veya kuralları, varsayılanlar, geçici tablolar, geçici saklı yordamlar veya sistem nesneleri için saklanır.

Varlık türü

Başvuru Varlık

Başvurulan varlık

Tablo

Evet *

Evet

Görünüm

Evet

Evet

Transact-SQL saklı yordam **

Evet

Evet

CLR saklı yordamı

Hayır

Evet

Transact-SQL kullanıcı tanımlı işlev

Evet

Evet

clr kullanıcı tanımlı işlev

Hayır

Evet

CLR tetikleyicisi (dml ve ddl)

Hayır

Hayır

Transact-SQL DML tetikleyicisi

Evet

Hayır

Transact-SQL Veritabanı -düzey DDL tetikleyicisi

Evet

Hayır

Transact-SQL Server -düzey DDL tetikleyicisi

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 şemasıkoleksiyon

Hayır

Evet

Bölüm işlev

Hayır

Evet

* Tablo yalnızca başvuru sırasında başvuru varlık olarak izlenir bir Transact-SQL modülü, kullanıcı tanımlı tür veya xml şema koleksiyon tanımında bir hesaplanan sütun, denetim kısıtlamasını veya varsayılan kısıtlama.,

** Numaralandırılmış saklı yordamlar ile 1 ya da bir başvuru veya başvurulan varlık olarak izlenir den büyük bir tamsayı değeri.

Bağımlılık bilgilerini nasıl izlenir

The Veritabanı Altyapısı automatically tracks dependency information when referencing entities are created, altered, or dropped and records this information in the SQL Server system catalog.Örneğin, başvuran tetikleyici oluşturmak, bir tablo, bu varlıklar arasında bağımlılık kaydedilir.Bağımlılık bilgileri, tetikleyici sonradan sürüklerseniz, sistem Kataloğu'ndan kaldırılır.

Daha önceki sürümlerinin aksine SQL Server, hangi bağımlılıkları kimliği tarafından izlenen bağımlılıkları şimdi izlenir tarafından adı.Bunun anlamı Veritabanı Altyapısı başvurulan varlık yok olsa bile, iki varlık arasında bağımlılık bilgilerini izler saat başvuru varlık oluşturulur.Bu koşullarda nedeniyle oluşabilir ertelenmiş ad çözümlemesi.Örneğin, bir tabloya başvuran bir saklı yordam başarıyla oluşturuldu, ancak başvurulan tablo veritabanında bile yoksa, Yürütülmeyen.The Veritabanı Altyapısı records the dependency between the procedure and table, however, an ID for the table cannot be recorded because the object does not yet exist.tablo daha sonra oluşturduysanız, bir bağımlılık bilgilerini tablonun kodu döndürülür.

Başvurulan varlık adı bir kalıcı olarak görüntülendiğinde, bağımlılık bilgilerini izlenen SQL ifadesi başvuru varlık.Aşağıdaki şekillerde varlıkları adıyla başvurulduğunda, bağımlılık bilgilerini elde edilir:

  • By using any of the following statements in the definition of a Transact-SQL module:

    • Veri düzenleme dili (dml) deyimleri (select, INSERT, update, delete, birleştirme)

    • YÜRÜTME

    • BİLDİRMEK

    • (Bir kullanıcı tanımlı işlev veya kullanıcı tanımlı tür kullanılan yüklerken.For example, DECLARE @var int; SET @var = dbo.udf1.)

    Tanımında başvurulan varlıkları bir Transact-SQL create, alter veya drop değil izlenen gibi veri tanımlama dili (ddl) deyimleri kullanarak modülü.

  • İfadeleri de, create, alter veya drop table deyimi kullanarak bir Transact-SQL modülü ve başvurulan varlık bir Transact-SQL kullanıcı tanımlı bir işlev kullanıcı tanımlı tür, ya da bir hesaplanan sütun, denetim kısıtlamasını veya varsayılan kısıtlama. tanımlı xml şema koleksiyonu

Veritabanları arası ve sunucular arası bağımlılıkları

Geçerli bir üç bölümlü adı kullanarak bir varlık başka bir varlığa başvuru yaptığında, veritabanları arası bağımlılık oluşturulur.varlık değeri aygıtınkiyle tam olarak geçerli bir ad kullanarak başka bir varlığa başvuru yaptığında sunucular arası başvurusu oluşturulur.Yalnızca adı açıkça belirtilmişse sunucu ve veritabanı adı kaydedilir.Örneğin olarak belirlenmiş, MyServer.MyDB.MySchema.MyTable, sunucu ve veritabanı adları kaydedilir; Ancak, olarak belirtildiğinde MyServer..MySchema.MyTable, yalnızca sunucu adı kaydedilir.Çok parçalı geçerli adları hakkında daha fazla bilgi için bkz: Transact-SQL Sözdizimi Kuralları (Transact-SQL).

Aşağıdaki sınırlamalar geçerlidir:

  • openrowset ve SORGUAÇ opendatasource deyimleri için sunucular arası bağımlılıkları izlenir.

  • at ('…') exec deyim bağımlılıkları linked_server değil izlenir.

Aşağıdaki tablo izlenir çapraz sunucu ve veritabanı arası bağımlılıkları ve sistem Kataloğu'nda kaydedildiği ve tarafından bildirilen bilgileri özetler sys.sql_expression_dependencies (Transact-sql).

SQL ifadebir modülde

İzlenir

Başvurulan sunucu adı

Başvurulan veritabanı adı

Başvurulan şema adı

Başvurulan varlık adı

SEÇİN * s1.db2.sales.t1 gelen

Evet

S1

DB2

Satış

T1

SEÇİN * ndan db3...T1

Evet

 

DB3

 

T1

exec db2.dbo.Proc1

Evet

 

DB2

dbo

PROC1

at linked_srv1 ('…') exec

Hayır

 

 

 

 

exec linked_svr1.db2.sales.proc2

Evet

linked_svr1

DB2

Satış

proc2

Harmanlama bağımlılık izleme üzerindeki etkisi

Bir harmanlama sıralamak ve verileri karşılaştırmak kuralları belirler.Veritabanı harmanlama veritabanı içindeki varlıklar için bağımlılık bilgilerini tanımlamak için kullanılır.Örneğin bir saklı yordam baþvurur, Some_Table ve SOME_TABLE bir duyarlı kullanan bir veritabanı içinde harmanlama, iki adı karşılaştırması aynı olmadıklarını gösterir çünkü iki varlık için bağımlılık bilgileri kayıtlı.Duyarlı bir veritabanını kullanıyorsa, harmanlama, ancak tek bir bağımlılık kaydedilir.

Sunucular arası ve geçici veritabanı bağımlılıklar için harmanlama sunucusu başvuru nesnesi üzerinde bulunduğu sunucu ve veritabanı adı çözümlemek için kullanılır.Geçerli veritabanı harmanlama adı, şema ve nesne adları çözümlemek için kullanılır.

Aşağıdaki saklı yordam tanım düşünün.Saklı yordam örneğinde bir büyük küçük durum duyarlı harmanlamayı içeren bir veritabanı oluşturduysanız, SQL Server ile duyarlı bir sunucu harmanlama düzeni, iki bağımlılıkları varlıklar için kaydedilen srv_referenced.db_referenced.dbo.p_referenced ve srv_referenced.db_referenced.DBO.P_REFERENCED.

CREATE PROCEDURE p_referencing AS
    EXECUTE srv_referenced.db_referenced.dbo.p_referenced
    EXECUTE srv_referenced.db_referenced.DBO.P_REFERENCED
    EXECUTE SRV_REFERENCED.DB_REFERENCED.dbo.p_referenced;

Belirsiz başvuruları çözümleme

Çalışma zamanında çözümlemek için bir olan başvuru belirsiz saat kullanıcı tanımlı bir işlev, kullanıcı tanımlı tür (udt) veya bir xquery başvuru türü bir sütun xml.

Aşağıdaki saklı yordam tanım düşünün.

CREATE PROCEDURE dbo.p1 AS 
    SELECT column_a, Sales.GetOrder() FROM Sales.MySales; 

En saat saklı yordam oluşturulur, adı verilir mi Sales.GetOrder() ise kullanıcı tanımlı bir işlev adlı başvuru GetOrder , Sales şema veya adlı bir sütun Sales tür udt adlı bir yöntem GetOrder().Başvuru belirsiz olduğunda bağımlılık ayarlayarak belirsiz olacak şekilde bildirilen is_ambiguous sütun , sys.sql_expression_dependencies ve sys.dm_sql_referenced_entities 1.Bağımlılık bilgileri aşağıdaki bildirilir:

  • Saklı yordam ile tablo arasında bağımlılık.

  • Saklı yordam kullanıcı tanımlı işlev arasında bağımlılık.İşlev varsa, işlev Kimliğini bildirilir; Aksi durumda, null kimliğidir.

  • işlev bağımlılık belirsiz olarak işaretlenir.Yani, is_ambiguous olan küme 1.

  • Sütunları başvurulan deyim bağlı olduğundan sütun düzey bağımlılıkları rapor edilir.

Bağımlılıkları bakımını yapma

The Veritabanı Altyapısı maintains both schema-bound and non-schema-bound dependencies.Bu bağımlılıkları veritabanı önceki bir yükseltme yaparken örneğin bağımlılık izleme etkiler herhangi bir işlem sırasında otomatik olarak yenilenir sürüm , SQL Server veya değiştirme harmanlama veritabanı.