SELECT ve stored procedure

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
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

SELECT ve stored procedure

Mesaj gönderen m_ekici »

Merhaba arkadaşlar

Tablonun Son kayıt numarasını farklı bir tabloda tutuyorum. Kayıt yapacağımda store procedurden bir numara vermesini istiyorum o da oradaki numarayı bana verip +1 ile son numarayı arttırıyor. Tabloya aynı anda birden fazla kayıt eklemem gerekti. Bunu nasıl yaparım?

yani

Kod: Tümünü seç

INSERT INTO KAYIT_TABLO (ID, KOD, ADI) SELECT (EXEC SON_NUMARAVER), KOD, ADI FROM OKU_TABLO 
 
gibi bir yazımı nasıl kabul ettiririm?

iyi çalışmalar
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: SELECT ve stored procedure

Mesaj gönderen mussimsek »

Merhaba,

Abi onu yapmanın en kolay yolu cursor kullanmak. Dediğin tarzda bir kullanım olur mu bilmiyorum. OKU_TABLO'dan kayıtları cursor ile okuyup, sırasıyla KAYIT_TABLO'ya yazacaksın.

Kod: Tümünü seç

declare CUR_KAYITLAR CURSOR FOR 
  Select KOD, ADI
  FROM dbo.OKU_TABLO WITH (NOLOCK)
  order by 1
  
  Open CUR_FATURALAR
  FETCH NEXT FROM CUR_KAYITLAR INTO @DLR_KOD, @DLR_ADI
  While @@FETCH_STATUS = 0
  begin
    --burada sıradaki id'yi alacaksın.
    select @DLR_ID=...
    
    INSERT INTO KAYIT_TABLO (ID, KOD, ADI)
      select @DLR_ID, @DLR_KOD, @DLR_ADI
    FETCH NEXT FROM CUR_KAYITLAR INTO @DLR_KOD, @DLR_ADI
  end
  CLOSE CUR_KAYITLAR 
  DEALLOCATE CUR_KAYITLAR 
Kolay gelsin.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: SELECT ve stored procedure

Mesaj gönderen rsimsek »

Bu iş için ayrı bir tabloya gerek yok aslında. Ayrı tabloya şundan gerek olabilir. Ayrı bir transection ile açılıp her yeni kayıt girişinde sıraki numara alınıp bir artırılarak hemen gerisin geri yazılarak o tablonun transectionu commitraining yapılır. Bir başka terminal de bir önceki henüz kaydedilmemiş numarayı alıp bir artırarak aynı şekilde kullanabilir. Burada şöyle bir sorun olabilir. Eğer bu sıralama sizin için önemliyse önceki numarayı alan kaydı tamamlamadan vazgeçerse aradaki boş kalacaktır.

Firebird de olsa aynı işlemi generator le basitçe halletmek mümkündü. SQL-Server kullanmadığımdan oradaki çalışma mantığını bilemiyorum. Auto Increment diye bir tip var onunla ilgili olabilir. Yine de yukarıda dediğim gibi ikinci istemci için bir öncekinin bir şekilde post edilmesi önemli.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: SELECT ve stored procedure

Mesaj gönderen mussimsek »

SQL Server'da da Identity diye birşey var. Alanı otomatik olarak artırıyor.

Bu farklı tablo mantığı muhasebe programlarından kalma bir mantık sanırım. Onlarda genelde dos'taki programlarını windows'a direk taşıdıkları için, yeni otomatik artırma gibi şeyleri korumak yerine eski yapıyı aynen almışlar. Bence de identity kullanımı daha doğru olur. Bırakın SQL Server uğraşsın bunlarla.

Kolay gelsin.
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: SELECT ve stored procedure

Mesaj gönderen m_ekici »

Tek kayıtta problem olmuyor fakat fatura gibi birbirine bağlı birkaç tablo ile çalışıyorsan ana kaydın ID sini bilmen gerekiyor. Ana kayda bağlı kayıtları tablolarına yazarken ID ile göndermek daha mantıklı geliyor. Diğer türlü memTable gibi componentler kullanmam gerekiyor. Integer sayı uzunluğu yeterince uzun, arada boş kayıtlar çok mühim değil.

Tşk
Cevapla