MS-SQL Prosedürler
- 202
- (1)
- (5)
- 16 Haz 2017
MS-SQL veritabanı üzerinde tek bir prosedür sorgusu ile birden çok işlemi tek seferde gerçekleştirebilirsiniz.
Prosedür Oluşturmak
TRecords
veritabanı üzerinde detaylı bir örnek verilebilir. tabloUrunler
içerisine bir kayıt eklemek isteniyor. Ancak marka adı ve ürün türü ile birlikte tek seferde eklemek tek bir insert
komutu ile mümkün değildir.
Mantık olarak önce tabloMarkalar
tablosunda marka adı yoksa marka adına ait kayıt oluşturulmalı. Aynı şey tabloUrunTurleri
için de geçerlidir. Oluşturulan kayıtların ID
değerleri tabloUrunler
tablosundaki ilişkili alanlara eklenecektir.
Aşağıdaki sorgunun sonucunda belli bir marka adından kaç tane kayıt olduğunu görürsünüz.
select count(*) from tabloMarkalar where MarkaAdi = '...'
Eğer bu değer sıfıra eşitse tabloMarkalar
tablosuna kayıt eklenecektir.
if ((select count(*) from tabloMarkalar
where MarkaAdi = @_markaAdi) = 0)
insert into tabloMarkalar (MarkaAdi)
values (@_markaAdi)
procUrunEkle
isimli bir prosedür aşağıdaki gibi oluşturulur.
create proc dbo.procUrunEkle @_urunAdi nvarchar(50),
@_urunKodu varchar(10), @_aciklama nvarchar(max),
@_markaAdi nvarchar(100), @_turAdi nvarchar(50)
as
begin
-- Eğer @_markaAdi değeri yoksa ekle
if ((select count(*) from tabloMarkalar
where MarkaAdi = @_markaAdi) = 0)
insert into tabloMarkalar (MarkaAdi)
values (@_markaAdi)
-- Eğer @_turAdi değeri yoksa ekle
if ((select count(*) from tabloUrunTurleri
where TurAdi = @_turAdi) = 0)
insert into tabloUrunTurleri (TurAdi)
values (@_turAdi)
-- Ürün ekleme komutu aşağıdaki gibidir
-- Tür adı ve marka adı ile eşleşen ID' ler kullalır
insert into tabloUrunler (UrunAdi, UrunKodu,
UrunAciklama, UrunTuruID, MarkaID)
values (@_urunAdi, @_urunKodu, @_aciklama,
(select top 1 UrunTuruID from tabloUrunTurleri
where TurAdi = @_turAdi),
(select top 1 MarkaID from tabloMarkalar
where MarkaAdi = @_markaAdi))
end
Prosedürü çalıştırmak için exec
komutunu kullanmalısınız. Prosedür adından sonra parametreleri doğru değerlerle girerseniz sorgu sorunsuz bir biçimde çalışacaktır.
exec dbo.procUrunEkle N'NVIDIA GeForce RTX 2080 Ti', '0066A001',
N'RTX 2080 Ti Ekran Kartı', N'NVIDIA', N'Ekran Kartı'
İlişkili İçerikler
MS-SQL üzerinde kullanıcağınız sorgular için çeşitli fonksiyonlar oluşturabilirsiniz. Fonksiyonlarla alakalı avantaj ve kısıtlamaları inceleyin.