MS-SQL Prosedürler

  • 192
  • (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.

Paylaşın
Etiket Bulutu