SQL Bağımlılıklar'ı anlama

SQL bağımlılıklar, bir varlık baþka sayfalarında SQL deyimlerde kullanılan by-name başvurulardır.Bir varlığın, başka bir varlık tanımına başvuru ve sistem kataloğunda depolanan tanım adlı bir varlık başvuru.Başka bir varlık tarafından başvurulan bir varlık olarak adlandırılan bir Başvurulan varlık.Tarafından izlenen bir bağımlılık iki tür Database Engine.

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

    Şemaya bağlı bir bağımlılık, başvurulan varlık bırakılan veya başvuru varlık var olduğu sürece değişiklik engeller, iki varlık arasında bir ilişkidir.Şemaya bağlı bağımlı bir görünüm oluşturulur veya kullanıcı tanımlı işlev SCHEMABINDING, WITH yan tümce kullanılarak oluşturulur.Bir tablo, başka bir varlık gibi başvurduğunda şemaya bağlı bir bağımlılık de oluşturulabilir bir Transact-SQL Kullanıcı tanımlı fonksiyonu, kullanıcı tanımlı tür veya XML şema koleksiyon, bir CHECK veya VARSAYıLAN kısıtlama veya hesaplanan sütun tanımlaması. Bir iki bölümü ('nı kullanarak nesneyi belirtmeschema_name.object_name) ad bir şemaya bağlı başvuru olarak nitelendirin.

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

    Non-şemaya bağlı bir bağımlılık, kayıp veya değiştirilmiş başvurulan varlığı engellemeyen iki varlık arasında bir ilişkidir.

Aşağıda, bir SQL bağımlılığı örneği gösterir.

Depiction of a SQL dependency

Çizimde, iki varlık vardır: yordam X'i ve yordam Y. Bir SQL yordamını X içeren ifade, Y yordamına by-name başvuruda bulunuyor.Yordam X başvuru varlık olarak bilinir ve yordam Y, başvurulan bir varlık olarak bilinir.Yordam X, Y yordamı bağlı olduğundan yordamın X bir çalışma-ile başlayamaz saat yordam Y yoksa hata.Yordam X yoksa, ancak yordam Y başarısız olur değil.

Aşağıdaki örnek, nasıl saklı yordamın gösterir. X saklı yordam bağlı olabilir 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 üzerinde Y, aşağıdaki sorguyu çalıştırın.

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 tabloda, kendisi için bağımlılık bilgileri oluşturulan saklanır ve varlık türlerini listeler.Tablo, varlık bir başvuru varlık veya başvurulan bir varlık olarak izlenen gösterir.Bağımlılık bilgilerini değil oluşturulduğunda veya kuralları, varsayılanlar, geçici tablo, geçici saklı yordamlar veya sistem nesneleri sürdürülür.

Varlık türü

Başvuru Varlık

Başvurulan varlık

Table

Yes *

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ı fonksiyon

Evet

Evet

CLR kullanıcı tanımlı fonksiyon

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 sunucu düzeyinde DDL tetikleyicisi

Evet

Hayır

Genişletilmiş saklı yordamlar

Hayır

Evet

Sıra

Hayır

Evet

Veri türünün eşanlamlısı

Hayır

Evet

Tür (diğer ad ve CLR kullanıcı tanımlı tür)

Hayır

Evet

XML şema koleksiyon

Hayır

Evet

bölümleme işlev

Hayır

Evet

* Tablo yalnızca başvuru, başvuru bir varlık olarak izlenir bir Transact-SQL Modül, tür kullanıcı tanımlı veya hesaplanan sütun tanımı XML şema koleksiyonunda kısıtlama CHECK veya kısıtlama DEFAULT.

** 1 Ya da bir başvuru veya başvurulan varlık olarak izlenen daha büyük bir tamsayı olan saklı yordamlar numaralandırılır.

Bağımlılık bilgileri izlenen

The Database Engine automatically tracks dependency information when referencing entities are created, altered, or dropped and records this information in the SQL Server system catalog.Başvuran bir tetikleyici oluşturursanız, örneğin, bir tablo, bu varlık arasında bir bağımlılık kaydedilir.Bağımlılık bilgileri, tetikleyici sonradan olarak bırak, sistem katalogdan kaldırılır.

Önceki sürümlerinin aksine SQL Server, hangi bağımlılıklar KIMLIĞI tarafından izlenen içinde bağımlılıklar şimdi adıyla izlenir. Bunun anlamı Database Engine Başvurulan varlık başvuru varlık oluşturulduğunda bulunsa bile, iki varlık arasında bağımlılık bilgileri izler. Bu işlemin üstlenmesine durum nedeniyle oluşabilir Ertelenen ad çözümlemesi.Örneğin, bir tabloya başvuran bir saklı yordam başarıyla oluşturuldu, ancak başvurulan tabloyu veritabanında bulunsa bile, yürütülemeyen.The Database Engine records the dependency between the procedure and tablo, however, an ID for the tablo cannot be recorded because the object does not yet exist. Tablonun üstü olarak oluşturulursa, tablo KIMLIĞI ile diğer bağımlılık bilgileri verir.

Kalıcı SQL ifadesi başvuru varlık adı tarafından başvurulan varlık göründüğünde, bağımlılık bilgilerini izlenir.Varlıkları adıyla başvurulan aşağıdaki şekillerde, bağımlılık bilgilerini elde edilir:

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

    • veri işleme dili (DML) deyimleri (SELECT, INSERT, UPDATE, DELETE, BIRLEŞTIRME)

    • yürütmek

    • BİLDİR

    • küme (When küme bir kullanıcı tanımlı ile kullanılan işlev veya kullanıcı tanımlı tür.Örneğin, DECLARE @var int; SET @var = dbo.udf1.)

    Varlık tanımı içinde başvurulan bir Transact-SQL CREATE, DROP veya ALTER gibi veri tanımlama dili (DDL) deyimleri kullanarak bir modül değil izlenir.

  • Ifadeler içinde değilseniz, CREATE, ALTER veya DROP tablo deyimi kullanarak bir Transact-SQL Modül ve başvurulan nesneden bir Transact-SQL Kullanıcı tanımlı işlev, türü kullanıcı tanımlı veya hesaplanan sütun, CHECK kısıtlaması veya VARSAYıLAN kısıtlamayı tanımlı XML şema koleksiyon.

Geçici veritabanı ve geçici Server bağımlılıklar

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. Geçerli bir çok parçalı adları hakkında daha fazla bilgi için bkz: Transact-SQL sözdizimi kuralları (Transact-SQL).

Aşağıdaki sınırlamalar uygulanır:

  • OPENROWSET ve OPENQUERY OPENDATASOURCE deyimleri için geçici sunucu bağımlılıklar izlenir.

  • Tablo EXEC ('...') için bağımlılıklar EN linked_server izlenir.

Aşağıdaki tablo izlenir siteler için sunucu ve veritabanları arası bağımlılıkları ve sistem kataloğunda kaydedilen ve tarafından bildirilen bilgileri özetler. sys.sql_expression_dependencies (Transact-SQL).

Modülde SQL ifadesi

Izleniyor

Belirtilen sunucu adı

Veritabanı adı

Başvurulan şema adı

Belirtilen varlık adı

SELECT * FROM s1.db2.sales.t1

Evet

S1

DB2

Satış

T1

SELECT * FROM db3T1

Evet

 

DB3

 

T1

EXEC db2.dbo.Proc1

Evet

 

DB2

dbo

PROC1

YÖNET ('...') Linked_srv1 AT

Hayır

 

 

 

 

EXEC linked_svr1.db2.sales.proc2

Evet

linked_svr1

DB2

Satış

proc2

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

harmanlama, sıralamak ve verileri karşılaştırmak için geçerli olan kurallar belirler.Veritabanı Harmanlama veritabanı içinde varlıklar için bağımlılık bilgilerini tanımlamak için kullanılır.Örneğin, saklı yordam varlıkları başvuruyorsa Some_Table ve SOME_TABLE çünkü, iki ad karşılaştırmasını aynı olmadıklarını gösterir büyük/küçük harfe duyarlı bir alfabe kullanan bir veritabanını iki varlık için bağımlılık bilgileri kaydedilir. Bir büyük/küçük durum duyarlı olmayan harmanlama veritabanı kullanır, ancak yalnızca tek bir bağımlılık kaydedilir.

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

Aşağıdaki saklı yordam tanımına göz önünde bulundurun.Bir büyük/küçük durum duyarlı harmanlama örneğinde veritabanında saklı yordam oluşturduysanız SQL Server büyük/küçük durum duyarlı sunucu alfabe düzeni ile varlıklar için iki bağımlılıklar kaydedilir. 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şvuru çözümleniyor.

Kullanıcı tanımlı bir işlev, kullanıcı tanımlı tür (UDT) veya bir xquery başvuru türünde bir sütuna çalışma zamanında çözümleyebilir, başvuru belirsiz. xml.

Aşağıdaki saklı yordam tanımına göz önünde bulundurun.

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

saklı yordam oluşturduğunuz saat, bilinmiyor olup olmadığını Sales.GetOrder() adlı kullanıcı tanımlı bir işlev başvurusu GetOrder içinde 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 sys.sql_expression_dependencies ve 1 sys.dm_sql_referenced_entities is_ambiguous sütun ayarlayarak belirsiz olacak şekilde bildirilir.Bağımlılık bilgileri aşağıdaki bildirdi:

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

  • saklı yordam kullanıcı tanımlı fonksiyonun arasında bağımlılık.Işlev KIMLIĞI işlevi varsa, bildirilen; aksi halde KIMLIK NULL.

  • Işlev bağımlı olarak belirsiz olarak işaretlendi.Diğer bir deyişle is_ambiguous 1 olarak küme.

  • deyim içinde başvurulan sütunları bağlı için sütun düzeyinde bağımlılıklar raporlanır.

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

The Database Engine maintains both schema-bound and non-schema-bound dependencies.Örneğin, bir veritabanı önceki bir sürümünden yükseltirken, izleme bağımlılık etkiler herhangi bir işlem sırasında bu bağımlılıkları otomatik olarak yenilenir SQL Server veya, bir veritabanının harmanlama değiştirme.

Değişiklik Geçmişi

Güncelleştirilmiş içerik

"Sütun bağımlılığı CLR tablo değerli işlevler için izlenmez" deyim, açıklamalar bölümünden kaldırıldı.