Row Number() ve MS SQL kod eslenigi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Ronan
Üye
Mesajlar: 5
Kayıt: 04 Eyl 2011 07:05

Row Number() ve MS SQL kod eslenigi

Mesaj gönderen Ronan »

Arkadaslar,

Asaigdaki kodu Firebird 2.1 surumunde calistiramiyorum, FB'de Row_number komutu olmadigi icin daha baska sekilde yazamadim create generator komut var ama tam olarak onu da monte edemedim . Firebird editoru olarak FlameRobin' kullaniyorum.

Kod: Tümünü seç

UPDATE e SET e.prop_type = a.row_n FROM (SELECT d .elm_mat, d .elm_prof, ROW_NUMBER() OVER (ORDER BY d .elm_prof ASC, d .elm_mat ASC) AS row_n FROM  (SELECT DISTINCT elm_prof, elm_mat FROM [elements] ) d) a LEFT OUTER JOIN [elements] e ON e.elm_mat = a.elm_mat AND e.elm_prof = a.elm_prof 
Yardimci olursaniz sevinirim !!
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Row Number() ve MS SQL kod eslenigi

Mesaj gönderen sabanakman »

SQL 2005 veya 2008 kullanıyoranız

Kod: Tümünü seç

select SiraNo=row_number() over (order by dbid), * from sysdatabases
şeklinde kullanılabilir. SQL 2000'de ise bu fonksiyon bulunmadığından geçici tablo oluşturarak o tablo kullanılabilmektedir.

Kod: Tümünü seç

select IDENTITY(int,1,1) as SiraNo,* into #tmp from sysdatabases
select * from #tmp
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Ronan
Üye
Mesajlar: 5
Kayıt: 04 Eyl 2011 07:05

Re: Row Number() ve MS SQL kod eslenigi

Mesaj gönderen Ronan »

Benim problemim MS SQL 2005 'de calisan SQL kodunun Firebird 2.1 'de calismiyor olmasi.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Row Number() ve MS SQL kod eslenigi

Mesaj gönderen sabanakman »

Pardon, ters algılama olmuş :oops: . Galiba FB'de sıra numarası sistemi generator ismi altında daha farklı bir mantıkla çalışmaktadır. Bu da 3 aşamalı olarak çözülebilir.

Kod: Tümünü seç

create generator gen_row_01;

select gen_id(gen_row_01, 1), KOD, ADI from CARI;

drop generator gen_row_01;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Ronan
Üye
Mesajlar: 5
Kayıt: 04 Eyl 2011 07:05

Re: Row Number() ve MS SQL kod eslenigi

Mesaj gönderen Ronan »

Evet aslinda bunu da denedim de, biraz dengesiz calisiyor birden fazla kere ayni komutu(generator dongusunu) calistirinca hata vermeye basliyor, anladigim kadariyla create generator global bir obje yaratiyor ondan sonra program icinde onu cagiriyoruz, aslinda drop generator ile yok edilmesi lazim ama nedense yapmiyor.

Kod: Tümünü seç

Executing...
Error: *** IBPP::SQLException ***
Context: Statement::Execute( create generator gen_row_01 )
Message: isc_dsql_execute2 failed

SQL Message : -607
This operation is not defined for system tables.

Engine Code    : 335544351
Engine Message :
unsuccessful metadata update
DEFINE GENERATOR failed
attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_11"
Total execution time: 0.015s
Ayrica birde bunu basarsam bile tam olarak sql koduna nasil entegre edecegimi bilmiyorum.

Yardimlariniz icin tesekurler
Ronan
Üye
Mesajlar: 5
Kayıt: 04 Eyl 2011 07:05

Re: Row Number() ve MS SQL kod eslenigi

Mesaj gönderen Ronan »

Sonuc olarak asagidaki komut belli bir dataset geri donduruyor (DS1 diyelim ) yani isin yarisi halloldu gibi,

Kod: Tümünü seç

set generator gen_new to 0 ;
select gen_id(gen_new,1) as num, new_tbl.elm_prof, new_tbl.elm_mat from 
(select distinct elm_prof , elm_mat from ELEMENTS) new_tbl
fakat bundan sonra tum query'nin tamamlanmasi icin mevcut tabloyu nasil guncellerim yani :

Kod: Tümünü seç

update Elements e set e.prop_type = DS1.num where ?????? 
iste tam olarak da burada takiliyorum nasil baglanti kurucam bir karsilastirma gerekli oysa benim elimde bir dataset var (DS1).

Yardimici olursaniz sevinirim.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Row Number() ve MS SQL kod eslenigi

Mesaj gönderen aslangeri »

s.a.
orada kendi tablonuzun birincil anahtarına göre işlem yapmanız lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla