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.

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

Transact-SQL'i Kullanma

Saklı yordam WITH yeniden DERLEYIN seçeneği kullanılarak yeniden derlemek için

  1. Bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğundan tıklatın Yeni sorgu.

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

  1. Bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğundan tıklatın Yeni sorgu.

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

  1. Bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğundan tıklatın Yeni sorgu.

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

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

Ayrıca bkz.

Başvuru

procedure (Transact-sql) bırak

Kavramlar

Saklı yordam oluşturma

Saklı yordam değiştirmek

Saklı yordam yeniden adlandırma

Saklı yordam tanımı görüntüleme

Saklı yordam bağımlılıkları görüntülemek