![]()
Stored procedure , SQL de yazdığımız ve yine kendi içinde sakladığımız sorgulardır. Bu sorgular SQL içinde olduğu için hem daha güvenilir , daha hızlı ve Birçok yerde çağırabildiğimiz sorgulardır. Kod tekrarından kurtarmış olacaktır. Güvenli , Hızlı olmasını istediğimiz işlemler için Stored procedure yazabiliriz. Stored procedure nasıl oluşturulur nasıl update yapılır nasıl kullanılır Northwind db si ile örneklere bakalım
Örnek-1
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
USE [Northwind] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE StockCount AS SELECT * FROM Products WHERE UnitsInStock > 50 |
Çıktısı

Örnek-2
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
USE [Northwind] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE ProductQuery AS SELECT p.CategoryID, p.ProductName,p.UnitPrice, p.UnitsInStock FROM Products p (nolock) inner join Categories c ON p.CategoryID = c.CategoryID WHERE c.CategoryID in(2,4,8) and p.Discontinued is not null and p.UnitPrice >= 10.00 ORDER BY UnitPrice |
Not: nolock kilitli bir tablodan kilidin açılmasını beklemeden kayıt çekmeye yarar is null boş olan değerleri de test eder , is not null boş olmayan değerleri test eder
Çıktısı

Örnek-3 : Parametre de göndererek işleme sokabiliriz
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
USE [Northwind] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE AccountList (@OrderID int , @Discount int) AS SELECT ProductName, UnitPrice = ROUND(Od.UnitPrice, 2), Quantity, Discount = CONVERT(int, Discount * 100), ExtendedPrice = ROUND(CONVERT(money, Quantity * (1 – Discount) * Od.UnitPrice), 2) FROM Products P, [Order Details] Od WHERE Od.ProductID = P.ProductID and Od.OrderID = @OrderID and p.Discontinued = @Discount exec AccountList 10248, 0 |
Çıktısı

Örnek-4 : Northwind in kendi SP si üzerine
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
USE [Northwind] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[SalesByCategory] @CategoryName nvarchar(15), @OrdYear nvarchar(4) = ‘1998’ AS IF @OrdYear != ‘1996’ AND @OrdYear != ‘1997’ AND @OrdYear != ‘1998’ BEGIN SELECT @OrdYear = ‘1998’ END SELECT ProductName, TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1–OD.Discount) * OD.UnitPrice)), 0) FROM [Order Details] OD, Orders O, Products P, Categories C WHERE OD.OrderID = O.OrderID AND OD.ProductID = P.ProductID AND P.CategoryID = C.CategoryID AND C.CategoryName = @CategoryName AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear GROUP BY ProductName ORDER BY ProductName exec [Northwind].[dbo].[SalesByCategory] Beverages |
Burada da 1998 yılında satın alınan ürünlerin Ürün adına göre gruplanıp sıralanması yapılmıştır.
Çıktısı

Not: Yazdığımız bir SP yi Değiştirmek istediğimizde başına UPDATE yazıp çalıştırarak istediğimiz değişikliği yapar update ederiz.
sağlıcakla kalın…








Bir yanıt yazın