SP ile kayiti update etme veya yeni ekleme
-
- Üye
- Mesajlar: 143
- Kayıt: 15 Haz 2003 08:33
- Konum: Almaty, Kazakhstan
SP ile kayiti update etme veya yeni ekleme
Arkadaslar merhaba,
Sql server 2000 kullaniyorum ve burda X databasimde TBL_Stok tablom var
Bu tabloda yaklasik 40 000 kayit var, merkezden bana merkezin stok tablolari geliyor txt formatinda, simdi yapmam gereken su bu txt tablosundaki kayitlar eger TBL_stok tablomda var ise tum alanlari yeni gelen bilgileri koyup degistirmem eger yok isede yeni kayit ekleyerek bu bilgileri girmem lazim, Bunu delphi ile yaptim.
Txt tablsoundaki kayit kadar bir dongu ve dongu icin kayit varsa duzenle yoksa ekle seklinde kontroller koydum, fakat performans cok dusuk kaliyor, tum tablolari yaklasik 2 saat icinde yapabiliyorum,
Bunu acaba stored procedur ile yapabilirmiyim, yardimci olursaniz memnun olurum, kilit alan olarak Stok_kodu alanini kullaniyorum.
Tsk,
Burhan Cakmak
Sql server 2000 kullaniyorum ve burda X databasimde TBL_Stok tablom var
Bu tabloda yaklasik 40 000 kayit var, merkezden bana merkezin stok tablolari geliyor txt formatinda, simdi yapmam gereken su bu txt tablosundaki kayitlar eger TBL_stok tablomda var ise tum alanlari yeni gelen bilgileri koyup degistirmem eger yok isede yeni kayit ekleyerek bu bilgileri girmem lazim, Bunu delphi ile yaptim.
Txt tablsoundaki kayit kadar bir dongu ve dongu icin kayit varsa duzenle yoksa ekle seklinde kontroller koydum, fakat performans cok dusuk kaliyor, tum tablolari yaklasik 2 saat icinde yapabiliyorum,
Bunu acaba stored procedur ile yapabilirmiyim, yardimci olursaniz memnun olurum, kilit alan olarak Stok_kodu alanini kullaniyorum.
Tsk,
Burhan Cakmak
S.A.
Sp ile yapabilirsin
temel mantık şu şekilde olacak
1.önce gelen kaydın olupolmadığını kontrol ettireceksin
bu nun için select count(*) ..... şeklinde bir select yapıp sonucu bir değişkene aktarırsın.
2.eğer kayıt varsa update
3. else insert işlemi yapılacak.
ben fb de yapıyorum. sqlserver kullanmadım ama mantık bu şekilde.
kolay gelsin.
Sp ile yapabilirsin
temel mantık şu şekilde olacak
1.önce gelen kaydın olupolmadığını kontrol ettireceksin
bu nun için select count(*) ..... şeklinde bir select yapıp sonucu bir değişkene aktarırsın.
2.eğer kayıt varsa update
3. else insert işlemi yapılacak.
ben fb de yapıyorum. sqlserver kullanmadım ama mantık bu şekilde.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Selam,
Source'unu görsek, sana daha iyi fikir verebiliriz sanıyorum.
Bakalım ne kullanmışsın nasıl yazmışsın.
Kolay Gelsin.
Source'unu görsek, sana daha iyi fikir verebiliriz sanıyorum.
Bakalım ne kullanmışsın nasıl yazmışsın.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
-
- Üye
- Mesajlar: 143
- Kayıt: 15 Haz 2003 08:33
- Konum: Almaty, Kazakhstan
Merhaba,
Sayin aslangeri isin mantiginda ve calisma yontemini ben biliyorum, fakat daha once hic bir SP yazmadigim icin nasil kod yazacagimi bilmiyorum, bana kisa bir kod yazabilirseniz memnun olurum.
Ayrica sayin Kuri_TLJ, kullandigim kod asagidaki sekilde ve problemsiz calisiyor ama, 150 tablo var yuzbinlerce satir olan tablolar bunlar, ayrica 20 sube ile carpinca her sube 3 saat suruyor buda cok fazla bir sure bunu delphi ile degilde SP tanimlayip, SP'ye parametre gondererek yapsam sure dusermi ve mumkunse bana basit bir SP kodu yazabilirse arkadaslar memnun olurum...
Saygilar...
Sayin aslangeri isin mantiginda ve calisma yontemini ben biliyorum, fakat daha once hic bir SP yazmadigim icin nasil kod yazacagimi bilmiyorum, bana kisa bir kod yazabilirseniz memnun olurum.
Ayrica sayin Kuri_TLJ, kullandigim kod asagidaki sekilde ve problemsiz calisiyor ama, 150 tablo var yuzbinlerce satir olan tablolar bunlar, ayrica 20 sube ile carpinca her sube 3 saat suruyor buda cok fazla bir sure bunu delphi ile degilde SP tanimlayip, SP'ye parametre gondererek yapsam sure dusermi ve mumkunse bana basit bir SP kodu yazabilirse arkadaslar memnun olurum...
Saygilar...
Kod: Tümünü seç
Procedure Restoret1(Tableadi,Dosyadi:string);
var
i:longint;
fields:widestring;
aa1,ii:integer;
aa:tfieldtype;
alanturu,alanadi,header1:string;
yuzde,yuzde1:real;
str1:string[2];
sqlword:widestring;
uz:integer;
gecici:widestring;
begin
if islemvar=false then
Begin
deletefile(dosyadi);
exit;
end;
probackup1.progressbar1.stepby(1);
probackup1.progressbar1.stepit;
probackup1.progressbar1.position:=ctstat;
yuzde:=(ctstat/tablesayisi)*100;
yuzde1:=round(yuzde);
probackup1.label6.Caption:='% '+floattostr(yuzde1);
probackup1.statusbar1.panels[0].text:=tableadi;
application.ProcessMessages;
// Table i dosya dan okuyoruz ...
probackup1.adoquery1.SQL.Clear;
probackup1.adoquery1.LoadfromFile(dosyadi);
probackup1.adoquery1.Open;
probackup1.adoquery1.First;
for i:=0 to probackup1.adoquery1.RecordCount-1 do begin
probackup1.adoquery2.SQL.Clear;
probackup1.adoquery2.SQL.Add('select * from '+tableadi+' where LOGICALREF = '+probackup1.adoquery1.FieldByName('LOGICALREF').asstring);
probackup1.adoquery2.open;
if probackup1.adoquery2.RecordCount=0 then begin
probackup1.adoquery2.Append;
probackup1.adoquery2.edit;end else probackup1.adoquery2.edit;
for ii:=0 to probackup1.adoquery1.fieldcount-1 do begin
alanadi:=probackup1.adoquery1.Fields.Fields[ii].FullName;
aa:=probackup1.adoquery1.FieldByName(alanadi).DataType;
if aa=ftString then begin
gecici:=probackup1.adoquery1.FieldByName(alanadi).asstring;
for uz:=1 to length(gecici) do if gecici[uz]=#39 then gecici[uz]:=#34;
sqlword:=sqlword+alanadi+'= '+#39+gecici+#39+', ';
end else
begin
probackup1.adoquery2.FieldByName(alanadi).AsString:=probackup1.adoquery1.FieldByName(alanadi).asstring
end;
end;
probackup1.adoquery2.Post;
if sqlword <>'' then begin
uz:=length(sqlword);
if sqlword[uz-1]=',' then delete(sqlword,uz-1,1);
sqlword:='update '+tableadi+' set ' +
sqlword+' where LOGICALREF = '+probackup1.adoquery1.FieldByName('LOGICALREF').asstring;
probackup1.adoquery3.SQL.Clear;
probackup1.adoquery3.SQL.add(sqlword);
probackup1.adoquery3.ExecSQL;
probackup1.adoquery3.SQL.Clear;sqlword:='';
end;
probackup1.adoquery1.Next;
probackup1.adoquery2.Next;
end;
// dosyanin isi bitti sil
deletefile(dosyadi);
end;
Selamlar,
Neden Replication denemiyorsun?
Kolay Gelsin
Neden Replication denemiyorsun?
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Adnan Abi ve Arkadaşlar şu Replication nedir ne işe yarar? Nasıl yapılır? Bu kelime bana yabancı geliyor. Açıklama yaparsanız sevinirim.
Teşekkürler.
Teşekkürler.
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Özetle,
Replication tekrarlama anlamında olup, RDBMS'lerde birbirinden bağımsız olarak oluşturulmuş database'lerdeki belirli tablelları veya tüm database'i tamamını kapsayacak şekilde eşlenik hale getirme anlamına gelir.
Yani database'ler arasında oluşan kayıt ekleme düzeltme ve silme gibi bir çok işi otomatik olarak replication ile yapabilmektesin.
Kolay Gelsin.
Replication tekrarlama anlamında olup, RDBMS'lerde birbirinden bağımsız olarak oluşturulmuş database'lerdeki belirli tablelları veya tüm database'i tamamını kapsayacak şekilde eşlenik hale getirme anlamına gelir.
Yani database'ler arasında oluşan kayıt ekleme düzeltme ve silme gibi bir çok işi otomatik olarak replication ile yapabilmektesin.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
S.A.
fb de yapılmış örnek ama sqlserver syntax ına uyarmı bilmem
Kolay Gelsin.
fb de yapılmış örnek ama sqlserver syntax ına uyarmı bilmem
Kod: Tümünü seç
CREATE PROCEDURE BIRIMLER_IU (
ID SMALLINT,
BIRIMADI VARCHAR(5))
AS
BEGIN
IF (EXISTS(SELECT ID FROM BIRIMLER WHERE (ID = :ID))) THEN
UPDATE BIRIMLER
SET BIRIMADI = :BIRIMADI
WHERE (ID = :ID);
ELSE
INSERT INTO BIRIMLER (
ID,
BIRIMADI)
VALUES (
:ID,
:BIRIMADI);
END
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 143
- Kayıt: 15 Haz 2003 08:33
- Konum: Almaty, Kazakhstan
Malesef calismadi
Sayin Aslangeri
Kod icin tsk, Fakat SQL Server 2000'de calistiramadim, Sql server kullanan arkadas var ise cevirebilirse memnun olurum.
Replication kullanamam cunku bir cok kontrol yapmam lazim ayni zamanda program icinde,
Saygilar.
Kod icin tsk, Fakat SQL Server 2000'de calistiramadim, Sql server kullanan arkadas var ise cevirebilirse memnun olurum.
Replication kullanamam cunku bir cok kontrol yapmam lazim ayni zamanda program icinde,
Saygilar.
ÖNCE TEXTİ DATABASE E
SP içinde text dosyadan okuyabileceğini sanmıyorum ama. yine delphi ile text dosyadan okuyup bir temp table a kaydedip sgeri kalan kısmı sp ye bırakmayı düşünebilirsin.
Selamlar,
Yanılmıyorsam MS-SQLServer SP'lerinde Text Dosya okuma yazma gibi bir takım fonksiyonlar var oradan da yararlanılabilir.
Şu anda hatırımda değil ama biraz system SP'lerini kurcalamak lazım.
Kolay Gelsin.
Yanılmıyorsam MS-SQLServer SP'lerinde Text Dosya okuma yazma gibi bir takım fonksiyonlar var oradan da yararlanılabilir.
Şu anda hatırımda değil ama biraz system SP'lerini kurcalamak lazım.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/