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
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'te SQL veritabanı
Bu makalede Transact-SQL kullanarak SQL Server'da bir saklı yordamın nasıl yeniden derleneceği açıklanır. Bunu yapmanın üç yolu vardır: WITH RECOMPILE yordam tanımındaki seçenek veya yordam çağrıldığında, tek tek deyimler üzerinde YENİDEN DERLEME sorgu ipucu ya da sp_recompile sistem saklı yordamını kullanarak.
Başlamadan Önce
Recommendations
Bir yordam ilk kez derlendiğinde veya yeniden derlendiğinde, yordamın sorgu planı veritabanının ve nesnelerinin geçerli durumu için iyileştirilir. Bir veritabanı verilerinde veya yapısında önemli değişikliklere uğrarsa, bir yordamı yeniden derlemek bu değişiklikler için yordamın sorgu planını güncelleştirir ve iyileştirir. Bu, prosedürün işleme performansını geliştirebilir.
Prosedürün yeniden derlemesinin zorlanması gereken zamanlar ve otomatik olarak gerçekleştiği zamanlar vardır. OTOMATIK yeniden derleme, SQL Server her yeniden başlatıldığında gerçekleşir. Ayrıca, yordam tarafından başvuruda bulunan temel bir tabloda fiziksel tasarım değişiklikleri yapıldığında da oluşur.
Bir yordamı yeniden derlemeye zorlamanın bir diğer nedeni de, yordam derlemesinin "parametre algılama" davranışına karşı koymaktır. SQL Server yordamları yürütürken, derleme sırasında yordam tarafından kullanılan tüm parametre değerleri sorgu planını oluşturmanın bir parçası olarak eklenir. Bu değerler, yordamın daha sonra çağrıldığı tipik değerler ise, yordam her derlenip yürütüldüğünde sorgu planından yararlanır. Yordamdaki parametre değerleri sık sık atipikse, yordamın yeniden derlenip farklı parametre değerlerine dayalı yeni bir plan uygulanması performansı artırabilir.
SQL Server, yordamların deyim düzeyinde yeniden derlemesini içerir. SQL Server saklı yordamları yeniden derlediğinde, tüm yordam yerine yalnızca yeniden derlemeye neden olan deyim derlenmiş olur.
Bir yordamdaki bazı sorgular düzenli olarak atipik veya geçici değerler kullanıyorsa, yordam performansı bu sorguların içindeki RECOMPILE sorgu ipucu kullanılarak geliştirilebilir. Tüm yordam yerine yalnızca sorgu ipucunu kullanan sorgular yeniden derleneceği için SQL Server'ın deyim düzeyinde yeniden derleme davranışı taklit edilir. Ancak, yordamın mevcut parametre değerlerini kullanmanın yanı sıra, RECOMPILE sorgu ipucu, saklı yordam içindeki tüm yerel değişkenlerin değerlerini de deyimi derlerken kullanır. Daha fazla bilgi için bkz. Sorgu İpucu (Transact-SQL).
Note
Azure Synapse Analytics ayrılmış ve sunucusuz havuzlarda saklı yordamlar önceden derlenmiş kod değildir ve bu nedenle yeniden derlenemez. Daha fazla bilgi için bkz. Azure Synapse Analytics'te ayrılmış SQL havuzları için saklı yordamları kullanma.
Security
Permissions
YENİDEN DERLEME seçeneğiyle
Yordam tanımı oluşturulduğunda bu seçenek kullanılırsa, veritabanında CREATE PROCEDURE izni ve yordamın oluşturulduğu şemada ALTER izni gerekir.
Bu seçenek bir EXECUTE deyiminde kullanılırsa, prosedür üzerinde EXECUTE izinleri gerektirir. EXECUTE deyiminin kendisinde izinler gerekli değildir, ancak EXECUTE deyiminde başvuruda bulunan yordamda yürütme izinleri gereklidir. Daha fazla bilgi için bkz . EXECUTE (Transact-SQL).
Yeniden Derle sorgu önerisi
Bu özellik, yordam oluşturulduğunda ve ipucu yordamdaki Transact-SQL deyimlerine eklendiğinde kullanılır. Bu nedenle, veritabanında CREATE PROCEDURE izni ve yordamın oluşturulduğu şemada ALTER izni gerektirir.
sp_recompile sistem saklı yordamı
Belirtilen prosedür üzerinde ALTER izni gerektirir.
Transact-SQL Kullanımı
Veritabanı Altyapısı'na bağlanın.
** Standard çubuğundan Yeni Sorgu'ü seçin.
Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın. Bu örnek yordam tanımını oluşturur.
USE AdventureWorks2022; GO IF OBJECT_ID ( 'dbo.uspProductByVendor', 'P' ) IS NOT NULL DROP PROCEDURE dbo.uspProductByVendor; GO CREATE PROCEDURE dbo.uspProductByVendor @Name varchar(30) = '%' WITH RECOMPILE AS SET NOCOUNT ON; SELECT v.Name AS 'Vendor name', p.Name AS 'Product name' FROM Purchasing.Vendor AS v JOIN Purchasing.ProductVendor AS pv ON v.BusinessEntityID = pv.BusinessEntityID JOIN Production.Product AS p ON pv.ProductID = p.ProductID WHERE v.Name LIKE @Name;
WITH RECOMPILE seçeneğini kullanarak saklı yordamı yeniden derlemek için
Yeni Sorgu'yu seçin, ardından aşağıdaki kod örneğini kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın. Bu, yordamı gerçekleştirir ve yordamın sorgu planının yeniden derlenmesini sağlar.
USE AdventureWorks2022;
GO
EXECUTE HumanResources.uspProductByVendor WITH RECOMPILE;
GO
Bir saklı yordamı yeniden derlemek için sp_recompile'i kullanarak
Yeni Sorgu'yu seçin, ardından aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın. Bu işlem yordamı yürütmez, ancak sorgu planının yordamın bir sonraki yürütülmesinde güncelleştirilmesi için yordamı yeniden derlenecek şekilde işaretler.
USE AdventureWorks2022;
GO
EXEC sp_recompile N'dbo.uspProductByVendor';
GO
Sonraki Adımlar
Saklı Prosedür Oluştur
Saklı Yordamı Değiştir
Saklı Yordamı Yeniden Adlandırma
Saklı Yordam Tanımını Görüntüleme
Saklı Yordam Bağımlılıklarını Görüntüleme
PROSEDÜRÜ KALDIR (Transact-SQL)