Aracılığıyla paylaş


Saklý Yordamlarý (Veritabanı Altyapısı) oluşturma

Saklı yordamları CREATE PROCEDURE kullanarak oluşturabilirsiniz. Transact-SQL deyim.

saklı yordam oluşturmadan önce göz önünde bulundurun:

  • CREATE PROCEDURE deyimi, tek bir toplu iş başka bir SQL deyimleri ile birleştirilemez.

  • Yordamlar oluşturmak için , şemada yordamı oluşturulduğu veritabanındaki CREATE PROCEDURE iznine ve ALTER iznine olmalıdır.CLR saklı yordamlar için ya da başvurulan derleme sahip olmalıdır <method_specifier>, veya bu derlemede BAşVURULAR iznine sahiptir.

  • Saklı yordamlar, kapsamlı şema nesneleridir ve adlarını tanımlayıcıları kurallarýna gerekir.

  • Yalnızca geçerli veritabanında, bir saklı yordam oluşturabilirsiniz.

Saklı yordam oluşturma belirtmeniz:

  • Tüm, parametrelerini ve arama yordamını veya toplu iş için çıkış parametrelerini girin.

  • Veritabanında, diğer yordamlar arama gibi işlemleri yapmak için programlama ifadeleri.

  • Arama yordamını veya başarı veya başarısızlık (ve başarısızlık nedeni) belirtmek için bir toplu iş için döndürülen durum değeri.

  • Hata ifadeleri, yakalamak ve olası hataları işlemek gerekli.

    Hata etme ERROR_LINE ve ERROR_PROCEDURE de belirtilebilir gibi işlevleri saklı yordam.Daha fazla bilgi için bkz: Kullanarak TRY... CATCH Transact-SQL'DE.

Saklý Yordamlarý adlandırma

We recommend that you do not create any stored procedures using sp_ as a prefix.SQL Server uses the sp_ prefix to designate system stored procedures.Seçtiğiniz ad, bazı gelecekteki sistem yordamını ile çakışabilir.Adı sistem yordamından bağlamalar için uygulamanızın nonschema tam adı başvurular kullanır ve kendi yordam adı olan bir sistem yordamın adı çakışıyor, uygulamanız kesilir kendi.

Kullanıcı tanımlı bir sistem saklı yordamı ve ya da aynı adı taşıyan bir yordam olarak saklanan nonqualified ya dbo şema hiçbir zaman yürütmek d olacaktır; sistem saklı yordamı her zaman görüntülenip yürütmek yerine.Aşağıdaki örnekte, bu davranışı gösterir.

USE AdventureWorks;
GO
CREATE PROCEDURE dbo.sp_who
AS
    SELECT FirstName, LastName FROM Person.Contact;
GO
EXEC sp_who;
EXEC dbo.sp_who;
GO
DROP PROCEDURE dbo.sp_who;
GO

Bir açık şema niteleyici kullanılarak, bir küçük bir performans avantaj sağlar.Ad çözümlemesi biraz daha hızlıdır, Database Engine birden çok şema yordamı bulmak için arama yapmak sahip değil. Daha fazla bilgi için bkz: Yürütme bir saklı yordam.

Geçici saklý yordamlarý

Özel ve genel geçici saklı yordamlar, geçici tablolar için benzer # ve yordam adı için eklenen ## prefixes oluşturulabilir.Yerel geçici olarak saklanan yordam; # gösterir ## genel geçici olarak saklanan yordam gösterir.Bu yordamlar, sonra yok SQL Server bilgisayarı kapalı.

Geçici saklı yordamlar önceki sürümleri için bağlanırken kullanışlıdır SQL Server yeniden yürütme planları, desteği olmayan Transact-SQL ifadeleri veya toplu işler. Uygulamalar, bağlanma SQL Server 2000 ve daha yüksek kullanmalısınız Sp_executesql sistem saklı yordam geçici saklı yordam s. yerine Yerel bir geçici yordam oluşturulan bağlantı yapabilirsiniz yürütmek ve yordamı otomatik olarak silinir, bu bağlantıyı kapattı.

Herhangi bir bağlantı, bir genel geçici olarak saklanan yordam çalıştırabilirsiniz.Genel geçici olarak saklanan yordam yordamı oluşturan kullanıcı tarafından kullanılan bağlantı kapatılır ve bu yordamın tüm diğer bağlantılar tarafından şu anda yürütülen tüm sürümleri tamamlandığından kadar bulunmaktadır.Yordamı oluşturmak için kullanılan bir bağlantının kapatılmasından sonra başka hiçbir yürütme genel geçici olarak saklanan yordam izin verilir.Saklı yordamını çalıştırmadan zaten başlatılmış bağlantıları tamamlamak için izin verilir.

Saklı bir yordam değil # ile öneki varsa veya ## doğrudan oluşturulan tempdb , saklı yordam otomatik olarak veritabanıdır ne saat silinmiş SQL Server nedeniyle kapatılmış durumda tempdb yeniden her saat SQL Server başlatıldı. Doğrudan oluşturulan yordamlar tempdb oluşturma bağlantı sona erdirildi sonra yok.

Not

Geçici saklı yordamlar yoğun kullanımını Çekişme sistem tablolarında oluşturabilirsiniz tempdb ve olumsuz etkiler performans.It is recommended that sp_executesql be used instead.sp_executesql does not store data in the system tables and therefore avoids the problem.

CLR saklı yordamlar geçici saklı yordamlar oluşturulamıyor.

Örnekler

C.Karmaşık bir SELECT ile basit bir yordamı kullanma

Aşağıdaki saklı yordam tüm çalışanları verir (sağlanan ilk ve son adları), bunların başlıklarını ve bir görünümde, departman adlarını.Bu saklı yordam parametreleri kullanın.

The uspGetEmployees saklı yordam can be executed in these ways:

b.Basit bir yordamın parametrelerini kullanma

Aşağıdaki saklı yordam yalnızca belirtilen çalışanın verir (sağlanan ad ve soyad), her başlığı ve her departman adı bir görünümde.Bu saklı yordam, geçirilen parametreler için tam eşleşenleri kabul eder.

The uspGetEmployees saklı yordam can be executed in the following ways:

c.Basit bir yordam joker karakter parametreleriyle kullanma

Saklı yordamını yalnızca belirtilen çalışanları verir (sağlanan ilk ve son adları), başlıklar ve bunların bölümlerden bir görünüm.Bu saklı yordam desen geçirilen parametre ile eşleşen veya sağlanmayan, önceden ayarlanmış varsayılan kullanır (D harfi ile başlayan adları son).

The uspGetEmployees2 saklı yordam can be executed in many combinations. Yalnızca birkaç bileşimlerini burada gösterilir:

d.OUTPUT parametreleri kullanma

Aşağıdaki örnek oluşturur uspGetList saklı yordam, belirtilen bir tutarı aşan fiyatlarını olan ürünlerin listesini verir. Bu örnek, birden çok SELECT deyimi ve birden çok OUTPUT parametrelerini gösterir.OUTPUT parametreleri, harici bir yordam, bir toplu iş veya birden fazla izin Transact-SQL bir değeri yordamı yürütme sırasında erişim deyim'ı tıklatın.

yürütmek uspGetList listesini döndürmek için Adventure Works daha az $ 700 maliyet ürünleri (Bisikletleri). OUTPUT parametreleri @ Maliyet and @ ComparePrices kullanılan akış denetimli dil iletiye dönmek içinİletiler penceresini açın.

Not

OUTPUT değişken, yordamın oluşturulması sırasında yaný sýra değişken kullanımı sırasında tanımlanmış olmalıdır.The parameter name and variable name do not have to match; however, the data type and parameter positioning must match (unless @ListPrice= variable is used).

Kısmi bir sonuç kümesi aşağıdadır:

Product                                            List Price
-------------------------------------------------- ------------------
Road-750 Black, 58                                 539.99
Mountain-500 Silver, 40                            564.99
Mountain-500 Silver, 42                            564.99
...
Road-750 Black, 48                                 539.99
Road-750 Black, 52                                 539.99

(14 row(s) affected)

These items can be purchased for less than $700.00.