Saklı yordam yeniden derlemek
Bu konuda bir saklı yordam yeniden derlemek açıklar SQL Server 2012kullanarak Transact-SQL. Bunu yapmak için üç yolu vardır: WITH RECOMPILEyordam tanımı ya da yordam çağrıldığında, RECOMPILEsorgu ipucu tek tek deyimleri veya kullanarak sp_recompilesistem saklı yordamını. Bu konuda kullanmayı açıklar WITH RECOMPILEseçeneği bir yordam tanımı oluşturma ve varolan bir yordam yürütme. Ayrıca kullanarak açıklar sp_recompilesistem saklı yordamını varolan bir yordam yeniden derlemek için.
Bu Konuda
Başlamadan Önce
Öneriler
Güvenlik
Bir saklı yordam yeniden derlemek için kullanma:
Transact-SQL
Başlamadan Önce
Öneriler
Bir yordamın ilk kez derlenmiş ya da derlenmiş çekirdekler yordamın sorgu planı geçerli durumunu veritabanı ve nesneleri için optimize edilmiştir. Veritabanı verileri veya yapısı önemli değişiklikler uğrar, bir yordam yeniden güncelleştirir ve yordamın sorgu planı değişiklikleri için en iyi duruma getirir. Bu yordamın işleme performansı iyileştirebilir.
Var kere yordamı derlenmesini zorla ve diğer zamanlarda ne zaman otomatik olarak gerçekleşir zaman olmalıdır. Otomatik yeniden oluşur ne zaman SQL Serveryeniden. O da yordam tarafından başvurulan bir tablo fiziksel Tasarım değişiklikleri uğramıştır oluşur. Ancak tablonun kendisi değil değişti hangi prosedür yarar olabilir yeni bir dizin ekleme otomatik recompilation neden olmaz. Otomatik recompilation sonra yürütülen yordamı dahaki sefere oluşmaz SQL Serveryeniden. Bu durumda bekleyen yerine yürütülür bir sonraki başlatılışında yeniden derlemek için yordamı zorlamak yararlı olabilir bir SQL Serveryeniden.
"Parametresi koklama" karşı koymak için bir yordam yeniden derlemek için zorlamak için bir başka neden ise yordam derleme davranışı. Ne zaman SQL Serverprosedürleri yürütür o derlediğinde yordam tarafından kullanılan herhangi bir parametre değerleri parçası olarak sorgu planı üretme dahil. Tipik olanlar bu değerleri temsil olan yordamı daha sonra adı verilen, daha sonra sorgu yordamı faydaları o derler ve yürüten her zaman planı. Yordam parametresi değerleri sık sık Atipik, prosedür ve farklı parametre değerlerini temel alan yeni bir plan recompile zorlayarak performansı artırabilir.
SQL Serverdeyimi düzeyi recompilation yordamlar bulunur. Ne zaman SQL Serverrecompiles saklı yordamlar, recompilation neden deyimi derlenmiş, tam prosedürü yerine.
Bazı sorgular bir yordamda Atipik veya geçici değerleri düzenli olarak kullanıyorsanız, yordam performans RECOMPILE sorgu ipucu içinde bu sorguları kullanılarak geliştirilebilir. Yerine tam yordam, yalnızca sorgu ipucu kullanma sorguları recompiled çünkü SQL Server'ın deyimi düzeyi recompilation davranışını taklit. Ancak deyimi derlemek yordamın geçerli parametre değerleri kullanmaya ek olarak, RECOMPILE sorgu ipucu da saklı yordam içindeki herhangi bir yerel değişkenlerin değerlerini kullanır. Daha fazla bilgi için bkz: Sorgu ipucu (Transact-sql).
Güvenlik
İzinler
WITH RECOMPILESeçenek
Yordam tanımı oluşturulurken bu seçenek kullanılırsa, create procedure izni veritabanında ve yordamı oluşturulmaktadır şema alter izni gerektirir.Bu seçenek bir execute deyimi kullandıysanız, yordam yürütme izinlerini gerektirir. İzinlerini execute deyimi üzerinde gerekli değildir ancak yürütme izinlerini execute deyimi içinde başvurulan yordamı gereklidir. Daha fazla bilgi için, bkz. execute (Transact-sql).
RECOMPILESorgu ipucu
Bu özellik, yordam oluşturulduğunda ve ipucu eklenir kullanılır Transact-SQLyordam deyimlerinde. Bu nedenle, create procedure izni veritabanında ve yordamı oluşturulmaktadır şema alter izni gerektirir.sp_recompileSistem saklı yordamı
Belirtilen yordam alter izni gerektirir.
[Top]
Transact-SQL'i Kullanma
Saklı yordam WITH yeniden DERLEYIN seçeneği kullanılarak yeniden derlemek için
Bağlanmak Veritabanı Altyapısı.
Standart çubuğundan tıklatın Yeni sorgu.
Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute. Bu örnek, yordam tanımı oluşturur.
USE AdventureWorks2012;
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;
GO
Saklı yordam WITH yeniden DERLEYIN seçeneği kullanılarak yeniden derlemek için
Bağlanmak Veritabanı Altyapısı.
Standart çubuğundan tıklatın Yeni sorgu.
Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute. Bu örnek, tüm çalışanların döndüren bir basit bir prosedür oluşturur (ad ve soyadları birlikte), onların iş unvanları ve bir bölümü adları.
Ve sonra kopyalayın ve ikinci örnek kod sorgu penceresine yapıştırın ve tıklayın Execute. Bu yordamı yürütür ve yordamın sorgu planı yeniden derler.
USE AdventureWorks2012;
GO
IF OBJECT_ID ( 'HumanResources.uspGetAllEmployees', 'P' ) IS NOT NULL
DROP PROCEDURE HumanResources.uspGetAllEmployees;
GO
CREATE PROCEDURE HumanResources.uspGetAllEmployees
AS
SET NOCOUNT ON;
SELECT LastName, FirstName, Department
FROM HumanResources.vEmployeeDepartmentHistory;
GO
USE AdventureWorks2012;
GO
EXECUTE HumanResources.uspGetAllEmployees WITH RECOMPILE;
GO
Sp_recompile kullanarak bir saklı yordam yeniden derlemek için
Bağlanmak Veritabanı Altyapısı.
Standart çubuğundan tıklatın Yeni sorgu.
Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute. Bu örnek, tüm çalışanların döndüren bir basit bir prosedür oluşturur (ad ve soyadları birlikte), onların iş unvanları ve bir bölümü adları.
Sonra kopya ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute. Bu yordamı yürütmek değil, ancak bu yordamı yordam yürütülür bir sonraki açışınızda, sorgu planı güncelleştirilmesi recompiled işaretler.
USE AdventureWorks2012;
GO
IF OBJECT_ID ( 'HumanResources.uspGetAllEmployees', 'P' ) IS NOT NULL
DROP PROCEDURE HumanResources.uspGetAllEmployees;
GO
CREATE PROCEDURE HumanResources.uspGetAllEmployees
AS
SET NOCOUNT ON;
SELECT LastName, FirstName, Department
FROM HumanResources.vEmployeeDepartmentHistory;
GO
USE AdventureWorks2012;
GO
EXEC sp_recompile N'HumanResources.uspGetAllEmployees';
GO
[Top]
Ayrıca bkz.
Başvuru
procedure (Transact-sql) bırak
Kavramlar
Saklı yordam yeniden adlandırma