Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
PARAMETERIZATION veritabanı seçeneği SIMPLE olarak ayarlandığında, SQL Server sorgu iyileştiricisi sorguları parametreleştirmeyi seçebilir. Bu, sorguda yer alan tüm değişmez değerlerin parametrelerle değiştirildiğini gösterir. Bu işlem basit parametreleştirme olarak adlandırılır. SIMPLE parametreleştirmesi etkin olduğunda, hangi sorguların parametrelendirildiğini ve hangi sorguların geçerli olmadığını denetleyemezsiniz. Ancak, PARAMETERIZATION veritabanı seçeneğini FORCED olarak ayarlayarak veritabanındaki tüm sorguların parametreleştirilmesini belirtebilirsiniz. Bu işlem zorlamalı parametreleştirme olarak adlandırılır.
Aşağıdaki yollarla plan kılavuzlarını kullanarak veritabanının parametreleştirme davranışını geçersiz kılabilirsiniz:
PARAMETERIZATION veritabanı seçeneği SIMPLE olarak ayarlandığında, belirli bir sorgu sınıfında zorlamalı parametreleştirmenin denendiğini belirtebilirsiniz. Bunu yapmak için sorgunun parametreli biçiminde bir ŞABLON planı kılavuzu oluşturup saklı sp_create_plan_guide yordamında PARAMETERIZATION FORCED sorgu ipucunu belirtirsiniz. Bu tür bir plan kılavuzunu, tüm sorgular yerine yalnızca belirli bir sorgu sınıfında zorlamalı parametreleştirmeyi etkinleştirmenin bir yolu olarak düşünebilirsiniz. Basit parametreleştirme hakkında daha fazla bilgi için bkz. Sorgu İşleme Mimarisi Kılavuzu.
PARAMETERIZATION veritabanı seçeneği FORCED olarak ayarlandığında, belirli bir sorgu sınıfı için zorlamalı parametreleştirme değil, yalnızca basit parametreleştirme girişiminde bulunacağını belirtebilirsiniz. Bunu yapmak için sorgunun zorla parametreli biçiminde bir ŞABLON planı kılavuzu oluşturup sp_create_plan_guideparametresinde PARAMETERIZATION SIMPLE sorgu ipucunu belirtirsiniz. Zorlamalı parametreleştirme hakkında daha fazla bilgi için bkz. Sorgu İşleme Mimarisi Kılavuzu.
AdventureWorks2025 veritabanında aşağıdaki sorguyu göz önünde bulundurun:
SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel AS pm
INNER JOIN Production.ProductInventory AS pi
ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 101
GROUP BY pi.ProductID, pi.Quantity HAVING SUM(pi.Quantity) > 50;
Veritabanı yöneticisi olarak, veritabanındaki tüm sorgularda zorlamalı parametreleştirmeyi etkinleştirmek istemediğinizi belirlediniz. Ancak, söz dizimsel olarak önceki sorguya eşdeğer olan ancak yalnızca sabit değişmez değerlerinde farklılık gösteren tüm sorgularda derleme maliyetlerinden kaçınmak istiyorsunuz. Başka bir deyişle, bu tür bir sorgu için bir sorgu planının yeniden kullanılması için sorgunun parametreleştirilmesini istiyorsunuz. Bu durumda aşağıdaki adımları tamamlayın:
Sorgunun parametreli biçimini alın. Bu değeri sp_create_plan_guide kullanmak üzere almanın tek güvenli yolu, sp_get_query_template sistem saklı yordamını kullanmaktır.
PARAMETERIZATION FORCED sorgu ipucunu belirterek sorgunun parametreli biçiminde plan kılavuzunu oluşturun.
Önemli
Sorguyu parametreleştirmenin bir parçası olarak, SQL Server değişmez değerin değerine ve boyutuna bağlı olarak değişmez değerlerin yerini alan parametrelere bir veri türü atar. Aynı işlem, sp_get_query_template@stmt çıkış parametresine geçirilen sabit değişmez değerlerin değerinde gerçekleşir. sp_create_plan_guide'nin @params bağımsız değişkeninde belirtilen veri türünün SQL Server tarafından parametrelendirildiği için sorguyla eşleşmesi gerektiğinden, sorgu için olası parametre değerlerinin tamamını kapsayacak birden fazla plan kılavuzu oluşturmanız gerekebilir.
Aşağıdaki betik hem parametreli sorguyu almak hem de üzerinde bir plan kılavuzu oluşturmak için kullanılabilir:
DECLARE @stmt nvarchar(max);
DECLARE @params nvarchar(max);
EXEC sp_get_query_template
N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel AS pm
INNER JOIN Production.ProductInventory AS pi ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 101
GROUP BY pi.ProductID, pi.Quantity
HAVING sum(pi.Quantity) > 50',
@stmt OUTPUT,
@params OUTPUT;
EXEC sp_create_plan_guide
N'TemplateGuide1',
@stmt,
N'TEMPLATE',
NULL,
@params,
N'OPTION(PARAMETERIZATION FORCED)';
Benzer şekilde, zorlamalı parametreleştirmenin zaten etkinleştirildiği bir veritabanında, örnek sorgunun ve sabit değişmez değerleri dışında söz dizimsel olarak eşdeğer olan diğer kullanıcıların basit parametreleştirme kurallarına göre parametrelendirildiğinden emin olabilirsiniz. Bunu yapmak için OPTION yan tümcesinde PARAMETERIZATION FORCED yerine PARAMETERIZATION SIMPLE değerini belirtin.
Not
TEMPLATE plan kılavuzları, ifadeleri yalnızca tek bir ifadeden oluşan toplu olarak gönderilen sorgularla eşleştirir. Çok sayıda deyim içeren toplu işlemlerin içindeki ifadeler TEMPLATE plan kılavuzları tarafından eşleştirilmeye uygun değildir.