Sp yazarken kafam karıştı (Çözüldü)

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Sp yazarken kafam karıştı (Çözüldü)

Mesaj gönderen kahraman1285 »

Merhaba

Aşağıdaki gibi iki tablom var.

Kod: Tümünü seç

Tablo 1 							Tablo 2
Kolonlar							Kolonlar

Kod=(int)							kod=(int)
masa=(int)							masa=(int)
Adi=(varchar)						adi=(varchar)
Fiyat=(float)						fiyat=(float)
Miktar=(int)

Tablo 1 deki tüm kolonlar not null olarak ayarlanmış ve tüm satırlardaki bilgiler dolu.

Yapmak istediğim bir SP yazarak bu SP'ye dışarıdan sadece masa
değerini vermek suretiyle tablo 1 deki masa değeri aynı olan tüm kayıtları tablo 2 ye kaydetmek.

Denemelerimde bir türlü başarılı olamadım konu hakkında yardımcı olabilecek var mı?
En son kahraman1285 tarafından 07 Eki 2007 11:01 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

aşağıdaki gibi iki tablom var ve bir Sp yazarak siparis tablosundaki adi ve fiyat kolonlarını nasıl doldurablirim.
Yazdığım sp hata vermiyor fakat çalışmıyorda Nerde hata yaptım fikri olan var mı?

yemekler
kod int
adi varchar
fiyat money

siparis
kod
adi
fiyat


Kod: Tümünü seç

USE [Restoran]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[yemekadi]
AS
declare @sayac int
declare @sonkod int
declare @yemekismi varchar(15)
declare @fiyati float

set @sayac=1

set @sonkod=(SELECT MAX(kod) FROM dbo.siparis)

while (@sayac=@sonkod)
begin
--set @yemekismi=null
--set @fiyati=null

set @yemekismi=(select adi from dbo.yemekler where kod=@sayac)
set @fiyati=(select fiyat from dbo.yemekler where kod=@sayac)

update dbo.siparis
set adi=@yemekismi
where kod=@sayac

set @sayac=@sayac+1
end
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Bir cursor tanımla ve bu cursorun içinde Tablo1 inden masa ya göre kısıt vererek sorgulama yaptır(tabiki masa kısıtı için dışardan gelen bir değişken tanımlamalısın). Tablo2 ye yazacağın alanları Tablo1 den seçerek tanımlayacağın değişkenlere atamalısın. Bir döngü oluşturup bu döngü içinde Tablo2 ye gerekli alanları atayarak kayıt işlemini yapabilirsin. Cursor tanımlama ile ilgili örneği sql serverın helpinden veya şu linkte bulabilirsin:

http://delphiturkiye.com/forum/viewtopi ... highlight=

(bu mesajda fahretin abinin sybase için örnekleri mevcut, ben silme triggerı için örnek bir kod vermiştim aynı konu altında,onun içinde cursor kullanımı var )

2. yazdığın mesajda da ne sormak istediğini anlamadım
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

Naile hanım cevabınız için teşekkür ederim.Cursorler konusunda net bir bilgim olmadığından sorunumu while döngüsüyle çözdüm.

Kod: Tümünü seç

USE [Restoran]
GO
/****** Object:  StoredProcedure [dbo].[yemekadi]    Script Date: 10/06/2007 10:56:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[yemekadi]
AS
declare @sayac int
declare @sonkod int
declare @yemekismi varchar(15)
declare @fiyati float

set @sayac=1

set @sonkod=(SELECT MAX(kod) FROM dbo.siparis)

while not (@sayac > @sonkod)
begin
set @yemekismi=null
set @fiyati=null

set @yemekismi=(select adi from dbo.yemekler where kod=@sayac)
set @fiyati=(select fiyat from dbo.yemekler where kod=@sayac)

update siparis
set adi=@yemekismi,fiyat=@fiyati
where kod=@sayac

set @sayac=@sayac+1

end
Cevapla