Varsayılan parametre
Temel yazım için Saklı yordamlar dersine bak. Varsayılan değer verilen parametre çağrıda atlanabilir. NULL varsayılan ve (@p IS NULL OR sutun = @p), isteğe bağlı filtrenin yaygın kalıbıdır; ama parametre koklama riski taşır.
CREATE PROCEDURE dbo.usp_Urunler @kategori NVARCHAR(50) = NULL, @en_az DECIMAL(12, 2) = 0 AS BEGIN SET NOCOUNT ON; SELECT name, price FROM products WHERE (@kategori IS NULL OR category = @kategori) AND price >= @en_az ORDER BY price DESC, name; END; GO EXEC dbo.usp_Urunler @kategori = N'Kitap'; EXEC dbo.usp_Urunler @en_az = 5000;
İç içe çağrı
Bir yordam diğerini çağırabilir. @@NESTLEVEL kaçıncı derinlikte olduğunu verir. Sınır 32'dir; aşılınca Msg 217 alınır, bu motor da aynı hatayı verir.
CREATE PROCEDURE dbo.usp_Ic AS BEGIN SELECT @@NESTLEVEL AS derinlik; END; GO CREATE PROCEDURE dbo.usp_Dis AS BEGIN EXEC dbo.usp_Ic; END; GO EXEC dbo.usp_Dis;
INSERT ... EXEC
Yordamın sonuç kümesini tabloya alır. Sütun sayısı ve sırası uymalı. Sınırı: yordam birden çok sonuç kümesi döndürüyorsa işler karışır ve iç içe INSERT EXEC gerçek SQL Server'da yasaktır. Satır içi tablo değerli işlev çoğu zaman daha temizdir.
CREATE PROCEDURE dbo.usp_Kitap AS BEGIN SELECT product_id, price FROM products WHERE category = N'Kitap'; END; GO CREATE TABLE #kitap (product_id INT, price DECIMAL(12, 2)); INSERT INTO #kitap EXEC dbo.usp_Kitap; SELECT COUNT(*) AS adet, MAX(price) AS en_pahali FROM #kitap;
WITH RECOMPILE ve TVP
| Özellik | Ne yapar | Bu motorda |
|---|---|---|
WITH RECOMPILE | Yordam her çağrıda yeniden derlenir, plan önbelleğe yazılmaz | Yazım kabul edilir, plan etkisi görülmez |
| Tablo değerli parametre | CREATE TYPE ... AS TABLE, READONLY ile çok satır geçirme | Çalışmaz: CREATE TYPE reddedilir |
Yordamda güvenli işlem
Hata yönetimi kalıbı için Hata yönetimi ileri dersine bak: SET XACT_ABORT ON, TRY/CATCH, geri al, yeniden fırlat.