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.
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)