1. sayfa
sql server da otomatik olarak sıra numarası ataması yapabilirsin. tabloyu oluştururken mesela bit kolonun ismini "rowid" koydun .o alanı primery key yapmalısın ve aynı zamanda sayının otomatik artması için autoincrement yapmalısın.. SELECT rowid FROM tablo; bu satır ile rowid yi alabilirsin |
iyi fikir, ancak benim aradan herhangi bir satır silindiğinde sıralamada atlama yaşamamam lazım. atıyorum 5 tane satırım var, {1,2,3,4,5} şeklinde gidiyor. sonra ben 4. satırı sildiğimde {1,2,3,5} şeklinde gitmemesi lazım. 5. elemana silinen elemanın numarası gelecek ve yine düzgün sıralı bir dizi oluşturmasını bekliyorum. {1,2,3,4} şeklinde... ikincil olarak: elimde 200 civarında tablo var ;) |
böyle bi şansın yok ilişkisel veritabanında id ler degiştirilemez (primeri keyler yani) autoincrement yaparsan ekledigin yeni satır en sona eklenir aradaki boşluklar kalır |
zaten ben bu işi primaryKey ile yapmak niyetinde değilim. veritabanında bu sıralamayı tutmak da istemiyorum. Pekala o zaman, şu şekilde sorayım: benim tablo'mda binlerce veri var. ben bunları 500'er 500'er çekmek istiyorum. SELECT TOP 500 * FROM tablodiyerek ilk 500'ü getirdim... ikinci 500'e ulaşmak için nasıl bir yöntem önerirsiniz? benim yapmayı planladığım şey şuna benziyordu: SELECT TOP 500 * FROM tablo WHERE rowid>500 Ancak rowid diye birşey olmadığı için yapamadım doğal olarak. bu durumu nasıl halledebiliriz? |
bunu yapabilmen için çektigin id lerden en büyügünü kullanarak birsonraki selecti yapmalsın SELECT rowid FROM tablo WHERE rowid>enbuyukid LIMIT 500 |
LIMIT'i tanımıyor MsSQL... herhalde şu şekilde yapmamı tavsiye ediyorsun:
evet tablolarımdan birinde denedim işe yarıyor. şimdi bunu parametrize etmem gerekiyor. diyelim 3 gönderdiğimde 3'üncü 500'lük kitle gelmeli tabii ki. stored procedure yapmam gerekecek galiba. işe yarayacağından emin değilim. sorun şu ki: benim 200 civarında tablom var hepsinin zaten primarykey'leri var. bunlara bir de "rowid" şeklinde bir primaryKey ekleyemem. yanlış anlamayın üşendiğimden değil ;) ekleyemem yani, ortalık duman olur... [EDIT] ikincil ve daha önemli sorun da şu ki: burada bu mantığın çalışması için "ORDER BY Kodu" ifadesini herbir select cümleme yerleştirmem gerekiyor(yukarıdaki örnekte bunu yapmadığım halde çalıştı ama bu herzaman çalışacak anlamına gelmez). ama ben program içerisinde birçok başka şeye göre de sıralama yaptırmalıyım. rowid mantığıyla çalışabileceğim hazır bir özelliğe ihtiyacım var... |
eget tablolarında id ile ilgili alan varsa o alnı kullanabilirsin sorun olmat.. ilişkisel veri tabaninda mantikli okan primerykey in bir sayi olmasıdır eger sayıysa o alnları da kullanabilirsin |
tablolarımda primary key var, ama her tabloda aynı isimde değil. bunu parametrik yapmak istemiştim yani mesela bir stored procedure yazarak halletmek istemiştim ancak başarılı olamadım. daha doğrusu çalıştırdım ama parametrik yapınca ortaya bir sorun çıktı, onu halledemedim. problem şu:
bu kod benim denediğimin sadeleştirilmiş hali. eğer bunun çalışan bir versiyonunu üretebilirsek sanırım öbürünü de halledebiliriz.... |
aslında id nin düzgün gitmesini sağlayabilirsin.. yalnız her silme işleminden sonra geçici tablo oluşturman, eskisini silmen ve yeni tabloyu kullanarak kayıtları yeniden yaratman gerekir Ayrıca id leri değiştirmek eğer sql serverda ilişkiler kurduysan buna zarar verir |
benim problemim id sütunuyla değil. yani bu işi primary Keylere göre yapmayı planlamıyorum zaten... buna imkan da yok. 200 civarında tablom var bunların hepsinin primary keyleri farklı farklı tipte. kimisinin primary key'i iki kolondan oluşuyor. ben modüler bir çözüm arıyorum, tabloların herbirine dalmamı gerektirmeyecek bir çözüm... eğer mssql'in hazır bir özelliği olsaydı "rowid" benzeri, onu kullanacaktım. bildiğim kadarıyla oracle böyle birşey sunuyor, mssql'de de vardır diye ummuştum ama yokmuş anlaşılan. ilgilendiğiniz için çok teşekkür ederim arkadaşlar. Not: ben caydım ama problemin ucu açık... halen istediğim çözüme ulaşamadım, bulan olursa lütfen burada paylaşsın. ben şu an caymış vaziyetteyim ama bulursam bir çözüm paylaşırım burada... kolay gelsin... |
un.real ayni sorunu ben de yasiyorum suara.. mysql'de hersey superdi.. limit sagolsun ms sql'e gectim alt ust oldum sadece bu yuzden uzerinde calisiyorum birseyler cikarabilirsem hemen yazarim! |
1. sayfa
şunun gibi birşey lazım bana:
burada "rowid" yerine ne yazmam lazım?
< Bu mesaj bu kişi tarafından değiştirildi un.real -- 2 Ağustos 2005, 14:14:32 >