Aracılığıyla paylaş


sys.fn_validate_plan_guide (Transact-sql)

Belirtilen plan Kılavuzu geçerliliğini doğrular. sys.fn_validate_plan_guideİşlevi, sorgu planı Kılavuzu uygulandığında karşılaşılan ilk hata iletisini. Plan Kılavuzu geçerli olduğunda boş bir satır kümesi döndürülür. Fiziksel veritabanı tasarım değişiklikleri yapıldıktan sonra planı kılavuzları geçersiz hale gelebilir. Belirli bir dizin ve bu dizini daha sonra bırakılan bir plan Kılavuzu belirtir, örneğin, sorgu artık plan Kılavuzu kullanın edebilecektir.

Bir plan Kılavuzu doğrulayarak, Rehber yapılmaksızın Doktoru tarafından kullanılıp kullanılamayacağını belirleyebilirsiniz. İşlevin sonuçlarına göre plan Kılavuzu bırakma ve sorgu retune veya veritabanı tasarımı, örneğin, plan Kılavuzu'nda belirtilen dizin yeniden oluşturmayı tarafından değiştirmek karar verebilirsiniz.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

sys.fn_validate_plan_guide ( plan_guide_id )

Bağımsız değişkenler

  • plan_guide_id
    Plan Kılavuzu olarak bildirilen kimliğidir sys.plan_guides Katalog görünümü. plan_guide_idise inthiçbir varsayılan ile.

Dönen Tablo

Sütun adı

Veri türü

Açıklama

msgnum

int

Hata iletisi Kımlığı.

severity

tinyint

Önem düzeyi 1 ile 25 arasında ileti.

state

smallint

Durum kodu hata oluştuğu noktayı belirten hata sayısı.

message

nvarchar(2048)

Hata iletisi metni.

İzinler

Nesne kapsamlı plan kılavuzları, başvurulan nesne VIEW DEFINITION veya alter izni ve sorgu veya plan Kılavuzu'nda sağlanan toplu derlemek için izinleri gerektirir. Örneğin, bir toplu select deyimlerinin içeriyorsa, başvurulan nesneler üzerinde select izinleri gereklidir.

sql veya template kapsamlı plan kılavuzları, alter izni veritabanında ve sorgu veya plan Kılavuzu'nda sağlanan toplu derlemek için izinleri gerektirir. Örneğin, bir toplu select deyimlerinin içeriyorsa, başvurulan nesneler üzerinde select izinleri gereklidir.

Örnekler

A.Bir veritabanındaki tüm planı kılavuzları doğrulanıyor

Aşağıdaki örnek, geçerli veritabanındaki tüm planı kılavuzları geçerliliğini denetler. Bir boş sonuç kümesi döndürülür, tüm planı kılavuzları geçerlidir.

USE AdventureWorks2012;
GO
SELECT plan_guide_id, msgnum, severity, state, message
FROM sys.plan_guides
CROSS APPLY fn_validate_plan_guide(plan_guide_id);
GO

USE AdventureWorks2012;
GO
SELECT plan_guide_id, msgnum, severity, state, message
FROM sys.plan_guides
CROSS APPLY fn_validate_plan_guide(plan_guide_id);
GO

B.Önce veritabanında değişiklik uygulama planı Kılavuzu doğrulama sınama

Aşağıdaki örnek, dizin bırakmak için açık işlem kullanır. sys.fn_validate_plan_ guide İşlevi, bu işlem veritabanındaki tüm planı kılavuzları geçersiz olup olmadığını belirlemek için yürütüldüğünde. İşlevin sonuçlarına göre DROP INDEXifadesidir ya da taahhüt veya işlem geri alınır ve dizin değil düşer.

USE AdventureWorks2012;
GO
BEGIN TRANSACTION;
DROP INDEX IX_SalesOrderHeader_CustomerID ON Sales.SalesOrderHeader;
-- Check for invalid plan guides.
IF EXISTS (SELECT plan_guide_id, msgnum, severity, state, message
           FROM sys.plan_guides
           CROSS APPLY sys.fn_validate_plan_guide(plan_guide_id))
    ROLLBACK TRANSACTION;
ELSE
    COMMIT TRANSACTION;
GO

USE AdventureWorks2012;
GO
BEGIN TRANSACTION;
DROP INDEX IX_SalesOrderHeader_CustomerID ON Sales.SalesOrderHeader;
-- Check for invalid plan guides.
IF EXISTS (SELECT plan_guide_id, msgnum, severity, state, message
           FROM sys.plan_guides
           CROSS APPLY sys.fn_validate_plan_guide(plan_guide_id))
    ROLLBACK TRANSACTION;
ELSE
    COMMIT TRANSACTION;
GO

Ayrıca bkz.

Başvuru

sp_create_plan_guide (Transact-sql)

sp_create_plan_guide_from_handle (Transact-sql)

Kavramlar

Plan kılavuzları