Sorun giderme SQL bağımlılıklar

Bu konuda, genel nesne bağımlılık sorunları ve çözümleri açıklanmaktadır.

Dinamik yönetimi işlevi sys.dm_sql_referenced_entities mu değil dönmek sütun düzeyi bağımlılıklar

The sys.dm_sql_referenced_entities system function will report any column-level dependency for schema-bound references.Örneğin, dizinli görünüm şema gerektirdiği için dizinli görünüm için sütun düzey bağımlılıkları işlev bildirir bağlama.Ancak, ne zaman başvurulan varlık ise yalnızca sütunları başvurulan tüm ifadeyi bağlı olduğunda olmayan şemaya bağlı, sütun bağımlılıkları bildirilir.Deyimleri başarılı bir şekilde bağlı yalnızca tüm nesneleri at varsa saat ifadeleri ayrıştırılır.Varlık içinde tanımlanan bir deyim bağlamak başarısız olursa, sütun bağımlılıkları değil bildirilir ve referenced_minor_id sütun 0 döndürecektir.Sütun bağımlılıkları çözülemeyen, 2020 hata ortaya çıkar.Bu hata, nesne düzey bağımlılıkları döndürme karşı sorgu engellemez.

Çözüm

Önce 2020 hata iletisinde tanımlanan hataları düzeltin.Örneğin, aşağıdaki örnekte kod görünümü Production.ApprovedDocuments sütunlar üzerinde tanımlı Title, ChangeNumber, ve Status , Production.Document tablo.The sys.dm_sql_referenced_entities system function is queried for the objects and columns on which the ApprovedDocuments view depends.Görünümde başvurulan sütunları ile SCHEMA_BINDING yan tümce tümce tümce kullanarak görünüm oluşturulduğunda çünkü değiştirilebilir içinde bulunulan tablo.Örnek değiştirir sütun ChangeNumber , Production.Document Tablo için yeniden adlandırarak TrackingNumber.Katalog görünümü yeniden için sorgulanan ApprovedDocuments görünümü; Ancak görünümde tanımlanan tüm sütunlar için bağlanılamıyor.207 Ve 2020 hataları sorunu tanımlayan döndürülür.Bu sorunu gidermek için görünümün yeni adı yansıtacak şekilde değiştirilmesi gerekir sütun.

USE AdventureWorks2008R2;
GO
CREATE VIEW Production.ApprovedDocuments
AS
    SELECT Title, ChangeNumber, Status
    FROM Production.Document
    WHERE Status = 2;
GO
SELECT referenced_schema_name AS schema_name
    ,referenced_entity_name AS table_name
    ,referenced_minor_name AS referenced_column
FROM sys.dm_sql_referenced_entities ('Production.ApprovedDocuments', 'OBJECT');
GO
EXEC sp_rename 'Production.Document.ChangeNumber', 'TrackingNumber', 'COLUMN';
GO
SELECT referenced_schema_name AS schema_name
    ,referenced_entity_name AS table_name
    ,referenced_minor_name AS referenced_column
FROM sys.dm_sql_referenced_entities ('Production.ApprovedDocuments', 'OBJECT');
GO

Sorguyu aşağıdaki hata iletilerini döndürür.

Msg 207, Level 16, State 1, Procedure ApprovedDocuments, Line 3

Invalid column name 'ChangeNumber'.

Msg 2020, Level 16, State 1, Line 1

The dependencies reported for entity "Production.ApprovedDocuments" do not include references to columns. This is either because the entity references an object that does not exist or because of an error in one or more statements in the entity. Before rerunning the query, ensure that there are no errors in the entity and that all objects referenced by the entity exist.

Aşağıdaki örnek görünümünde sütun adı düzeltir.

USE AdventureWorks2008R2;
GO
ALTER VIEW Production.ApprovedDocuments
AS
    SELECT Title,TrackingNumber, Status
    FROM Production.Document
    WHERE Status = 2;
GO

Sütun is_ambiguous için Programmability işlevler tutarsız değerler bildiriyor

De bildirilen değer görünebilir sütun is_ambiguous tutarsız için kullanıcı tanımlı işlevler.The is_ambiguous column in the catalog view sys.sql_expression_dependencies and dynamic function sys.dm_sql_referenced_entities indicates that the reference to the entity is ambiguous.Yani varlık çalışma zamanında çözebilirsiniz 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.Varlık türü kullanıcı tanımlı işlevin nasıl başvurulur, bağlı olabilir veya hangi neden açık olmayabilir is_ambiguous için sütun küme bir durumda 1 (doğru) ve 0 (yanlış) başka bir.Örneğin, aşağıdaki saklı yordam göz önünde bulundurun.

CREATE PROCEDURE dbo.p1 
AS
    SELECT Sales.GetOrder() FROM t1;
    SELECT Sales.GetOrder();

İlk seçme deyim, anlaşılır değil mi Sales.GetOrder() kullanıcı tanımlı bir işlev Sales şema veya sütun adlı Sales tür udt adlı bir yöntem GetOrder().Bu durumda, is_ambiguous sütun olacak küme için başvurulan varlık 1 Sales.GetOrder().İkinci seçme deyim, başvuru Sales.GetOrder() temizlendiğinde; sözdizimi, temel, yalnızca kullanıcı tanımlı bir işlev başvuru kaçırabilir.Bu durumda, is_ambiguous sütun küme 0.Bu davranış, bildirilen değer görünmesini sağlamak is_ambiguous sütun tutarsız.Anlama nasıl değeri is_ambiguous sütun belirledi açıklığa kavuşturmak bildirilen değer.

The is_ambiguous column is set to 0 (false) when:

  • Kullanıcı tanımlı bir işlev başvurusu olduğunu temizdir.Diğer bir deyişle, kullanıcı tanımlı bir işlev ve bir sütun udt yöntem veya sütun türü sorgu bağlar xml Bu adla yok.

  • Başvuru sütun udt yöntem olduğunu temizdir.Yani bu udt yöntem ile bir sütun bulunmaktadır ve bir kullanıcı tanımlı işlev veya sütun türü xml adıyla mu değil.

The is_ambiguous column is set to 1 (true) when:

  • Bir kullanıcı tanımlı işlev, sütun udt yöntem veya sütun türü xml ile başvurulan adı yok.

  • Başvurulan adı için birden çok varlık var.Örneğin, kullanıcı tanımlı bir işlev ve bir sütun udt yöntem aynı ada sahip.

Doğası gereği belirsiz olan varlıklar için mümkün olan referenced_database_name ve referenced_schema_name sütunları olan geçersiz.Örneğin, kullanıcı tanımlı işlev aşağıdaki noktaları dikkate alın:

CREATE FUNCTION GetNextEmpHierarchyId (@empname varchar(25))
RETURNS hierarchyid
AS
BEGIN
    RETURN 
(
    SELECT h.empid.GetDescendant((SELECT MAX(h1.empid)  
                                  FROM dbo.Employees AS h1  
                                  WHERE h1.empid.GetAncestor(1) = h.empid), NULL)
    FROM dbo.Employees AS h  
    WHERE h.empname = @empname  
)  
END;

Sütunları referenced_database_name ve referenced_schema_name nedeniyle işlev için geçersiz olacaktır hierarchyid udt yöntem çağrıları.Başvurular için NET değildir h.empid.GetDescendant ve h1.empid.GetAncestor üç bölümlü adı kullanarak bir varlık başvuruları olan (database.schema.object) veya bir udt yöntem (tablo.sütun.yöntem).

Çözüm

Kullanıcı eylem gereklidir.

Sütun referenced_id için veritabanları arası bağımlılıkları bildirilen

The referenced_id column is never resolved for cross-database references in the sys.sql_expression_dependencies catalog view.Yalnızca adı açıkça belirtilen şema adı ve veritabanı adı kaydedilir.Örneğin olarak belirlenmiş, MyDB.MySchema.MyTable, veritabanı ve şema adları kaydedilir; Ancak, olarak belirtildiğinde MyDB..MyTable, yalnızca veritabanı adı kaydedilir.

The referenced_id is reported for cross-database references in the sys.dm_sql_referenced_entities system function only when the referenced entity can be successfully bound.Bağlama, aşağıdaki nedenler dahil olmak üzere çeşitli nedenlerle başarısız olabilir:

  • Veritabanı çevrimdışıdır.

  • Başvurulan varlık veritabanında yok.

Çözüm

Başvurulan varlık veritabanında var ve veritabanının çevrimiçi olduğundan emin olun.

Sütun referenced_id için başvurulan varlıkları içinde Database Null olur

The sys.dm_sql_referenced_entities system function and the sys.sql_expression_dependencies system view will report the ID of any schema-bound referenced entity.Ancak, referenced_id sütun içindir null olmayan-şemaya bağlı başvuruları veritabanı içinde başvurulan varlık kimliği saptanamayan.Bu durum oluşabilir olduğunda:

  • Başvurulan varlık veritabanında yok.

  • Arayan bağımlı ad çözümlemesidir.Bu durumda, is_caller_dependent sütun küme 1.

Çözüm

Başvurulan varlık veritabanında varolduğunu doğrulayın.Bulunamadı, veya, varlık varsa, aşağıdaki gereksinimlerin karşılandığından emin olun ise varlığı oluşturun:

  • Başvurulan varlık adı doğru yazılmıştır.

  • Belirtilen ad, veritabanı harmanlama gereksinimlerini karşılar.Duyarlı bir veritabanını kullanıyorsa, harmanlama, belirtilen adla belirtilen nesne adı tam durum eşleşmesi gerekir.Örneğin, adlı bir nesne kimliği SalesHistory ile duyarlı bir veritabanında bulunması değil harmanlama olarak belirtilirse, saleshistory.

  • Nesnenin şema adı belirtildi.İki bölümü adı (schema_name.object_name), arayan varsayılan şemada nesne değil, gerek yoktur sys , şema veya dbo şema.

Yukarıdaki gereksinimleri karşılamak için başvuru varlık tanımını değiştirin.

Başvurulan varlık arayan bağımlı ise, başvurulan varlık için bir iki bölümü adı belirterek başvuru varlık tanımını değiştirin.Arayan bağımlı başvuruları hakkında daha fazla bilgi için bkz: sql Raporlama bağımlılıklar.

Bağımlılık bilgileri master veritabanındaki nesneler için bildirilen

sql bağımlılıkları oluşturulan kullanıcı tanımlı varlıklar master veritabanı oluşturulur ve saklanır.Bir varlık için sql bağımlılıkları bildirilen, aşağıdaki adımları izleyin:

  • Varlık izleme bağımlılığı için geçerli bir tür olduğundan emin olun

    Tüm kullanıcı nesneleri için bağımlılık bilgileri izlenir.Hangi için bağımlılık bilgileri oluşturulur ve tutulan Varlık türlerinin listesi için bkz: sql bağımlılıklar anlama.

  • Varlık bir sistem nesnesi olarak işaretlenmiş emin olun.

    Sorgu is_ms_shipped sütun için varlık, sys.objects Katalog görünümü.Bu sütun, küme , 1 ile birlikte gelen ya da bir sistem nesnesi varlıktır SQL Server, ya da el ile bir sistem nesnesi tarafından taklit edecek şekilde değiştirilmiş olan kullanıcı tanımlı bir nesne kümebu sütuna 1 ting.

Çözüm

Desteklenmeyen bir tür nesnesiyse, bağımlılık bilgileri kullanılabilir değil.

Sistem nesneleri bağımlılıkları izlenir.Kullanıcı tanımlı varlık ise, is_ms_shipped column gerekir sıfırlamak isterseniz 0 SQL Server oluşturmak ve korumak bağımlılıklar varlık.