Share via


Yürütülen Saklý Yordamlarý (Veritabanı Altyapısı)

Yürütülecek bir saklı yordam, kullanın Transact-SQL yürütmek deyim. Alternatif olarak, saklı yordam saklı yordam ilk deyim, bir toplu iş ise, yürütmek anahtar kullanmadan çalıştırabilirsiniz.

Yürütme sistem saklı yordamları

sistem saklı yordamları karakterlerle başlayan sp_who.Fiziksel olarak saklandıkları Kaynak veritabanı mantıksal olarak görünür, ancaksys örnek her sistem ve kullanıcı tanımlı veritabanı şemasıSQL Server. sistem saklı yordamları, saklı yordam adı tam olarak kaliteli gerek kalmadan, herhangi bir veritabanı çalıştırılabilir.Bir nonschema nitelenmiş bir tek parça ad olarak adıdır sp_someproc veya gibi üç parçalı adsomedbsp_someproc ile ikinci bölümü (şema adı belirtilmemiş.

Öneririz, şema-tüm sistem uygun olduğunuzu saklı yordam ile adları sys ad çakışmaları önlemek için şema adı. Aşağıdaki örnek, bir sistemi yürütme için önerilen yöntem gösterir saklı yordam.

EXEC sys.sp_who;

Aşağıdaki örnekler, geriye dönük uyumlu yöntemleri yürütme göstermektedir sistem saklı yordamları.

Not

Sistem saklı yordamlara yürütme aşağıdaki yöntemleri, gelecekteki bir sürümüne kaldırılacaktır. SQL Server. Bu yöntemler, yeni iş geliştirme kullanmaktan kaçının ve onları kullanan uygulamalar değiştirmek planlama.

EXEC sp_who;
EXEC master.dbo.sp_who;
EXEC mydatabase..sp_who;
EXEC dbo.sp_who;
EXEC mydatabase.dbo.sp_who;

Veritabanı Harmanlama eşleştirme

SQL Server 2008 Sistem yordamın adı eşleşen arama veritabanı harmanlama kullanır.Bu nedenle, uygulamanızın her zaman sistem yordam adları tam durum kullanmanız gerekir.Örneğin, bu kod büyük/küçük harfe duyarlı harmanlama olan bir veritabanında içeriğinde çalıştırılan başarısız olur:

exec SP_heLP; -- Will fail to resolve because SP_heLP does not equal sp_help 

Usesys.system_objects and sys.system_parameters katalog görünümleri, sistem tam olarak görüntülemek için saklı yordam adları.

Genişletilmiş sistem yürütülüyor yordamlar depolanan

Sistem genişletilmiş saklı yordamlar karakterlerle başlayan xp_.Fiziksel olarak saklandıkları Kaynak veritabanı mantıksal olarak görünür, ancaksys örnek her sistem ve kullanıcı tanımlı veritabanı şemasıSQL Server. Aşağıdaki örnek, genişletilmiş bir sistem olarak çalıştırmak için önerilen yöntem gösterir saklı yordam.

EXEC sys.xp_subdirs 'c:\';

Kullanıcı tanımlı saklı yordamları çalıştırma

Bir kullanıcı tarafından tanımlanan yürütme saklı yordamını (veya toplu iş iş işlemindeki kullanıcı tanımlı bir saklı yordam veya işlev gibi bir modül içinde), saklı yordam adı ile en az şema adı niteleme öneririz.

Aşağıdaki örnek, kullanıcı tanımlı bir saklı yordamı çalıştırmak için önerilen yöntem gösterir.

USE AdventureWorks;
GO
EXEC dbo.uspGetEmployeeManagers 50;

- Veya -

EXEC AdventureWorks.dbo.uspGetEmployeeManagers 50;
GO

Kullanıcı tanımlı nonqualified saklı yordam belirtilirse, Database Engine yordam aşağıdaki sırayla arar:

  • The sys schema of the current database.

  • Bir toplu iş veya dinamik SQL yürütülen, arayanın varsayılan şema.Veya, nonqualified yordamın adı başka bir yordam tanımı gövdesi içinde görünürse, bu yordamın içeren şema sonraki aranır.Varsayılan şemalar hakkında daha fazla bilgi için bkz: Kullanıcı şeması ayırma.

  • The dbo schema in the current database.

Important noteImportant Note:

Bir kullanıcı tarafından oluşturulan bir saklı yordamı aynı adı taşıyan bir sistem saklı yordamı, nonschema nitelenmiş ad başvuru kullanırsanız kullanıcı tarafından oluşturulan bir saklı yordam hiçbir zaman yürütülür.Daha fazla bilgi için bkz: Saklý Yordamlarý (Veritabanı Altyapısı) oluşturma.

Parametreler belirtme

Saklı yordam, bunları kabul etmek için yazılmışsa, parametre değerlerini sağlanabilir.

Sağlanan değer, bir sabit veya değişken olmalıdır; bu, parametre değeri olarak işlev adı belirtemezsiniz.Kullanıcı tanımlı değişkenleri olabilir veya Sistem değişkenleri @@ spid gibi.

Aşağıdaki örnekler saklı yordam için parametre değerleri geçirmeden göstermektedir. uspGetWhereUsedProductID. Yordamı, iki giriş parametresi için değerler bekler: bir ürün KIMLIĞI ve tarih. Sabit ve değişken parametreleri vermek ve ayrıca fonksiyonun değeri için bir değişken kullanın, örnekler gösterir.

USE AdventureWorks;
GO
-- Passing values as constants.
EXEC dbo.uspGetWhereUsedProductID 819, '20050225';
GO
-- Passing values as variables.
DECLARE @ProductID int, @CheckDate datetime;
SET @ProductID = 819;
SET @CheckDate = '20050225';
EXEC dbo.uspGetWhereUsedProductID @ProductID, @CheckDate;
GO
-- Try to use a function as a parameter value.
-- This produces an error message.
EXEC dbo.uspGetWhereUsedProductID 819, GETDATE();
GO
-- Passing the function value as a variable.
DECLARE @CheckDate datetime;
SET @CheckDate = GETDATE();
EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;
GO

Parametreleri saklı yordamda tanımlanan sırası sırasını belirtmek istiyorsanız, bunları adlandırmalısınız.Daha fazla bilgi için bkz:Parametre adı belirtme.

Parametre çağıran bir program için bir değer döndürmelidir belirtmek için , OUTPUT anahtar sözcüğünü kullanın.Daha fazla bilgi için bkz:Bir Parameter yönünü belirleme.

Parametreler sırasını belirtme

If you supply parameters in the form **@parameter =**value, you can supply them in any order.Ayrıca, kendisi için Varsayılanlar sağladınız parametreleri atlayabilirsiniz.If you supply one parameter in the form **@parameter =**value, you must supply all subsequent parameters this way.If you do not supply parameters in the form **@parameter =**value, you must supply them in the order given in the CREATE PROCEDURE statement.

Sunucu, bir saklı yordam çalıştırıldığında, yordam oluşturma sırasında parametre listesi ile birlikte olan herhangi bir parametre reddeder.Parametre adı eşleşmiyor, (parametre adını açıkça geçirmeden) başvuruyla geçirildi herhangi bir parametre kabul edilmez.

Parametreler varsayılan değerleri kullanarak

Kendisi için Varsayılanlar sağladınız parametreleri atlayabilirsiniz, ancak parametrelerin listesi yalnızca kesirli kısmını.For example, if a stored procedure has five parameters, you can omit both the fourth and the fifth parameters, but you cannot skip the fourth and still include the fifth unless you supply parameters in the form **@parameter =**value.

Bir parametrenin varsayılan değeri tanımlanmışsa saklı yordam içindeki parametre için kullanılan zaman:

  • Saklı yordam çalıştırıldığında parametresi için değer belirtildi.

  • Parametre değeri olarak VARSAYıLAN anahtar sözcüğü belirtildi.