Şimdi Ara

MsSQL: Satır ID'leri (ROWID???)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
14
Cevap
0
Favori
1.920
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • dostlar bu MsSQL Server'da tablonun herbir satırına otomatik olarak atanan bir sıra numarası var mı? varsa buna nasıl ulaşabilirim?
    şunun gibi birşey lazım bana:

     
    SELECT rowid, * FROM tablo


    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 >



  • 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 tablo
    diyerek 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:
     
    --birinci adım: ilk 500 kayıt
    SELECT TOP 500 * FROM tablo
    GO

    --ikinci adım: ikinci 500 kayıt
    DECLARE @deger nvarchar(100)
    SET @deger = (SELECT MAX(Kodu) FROM (SELECT TOP 500 * FROM tablo) tablo)
    SELECT TOP 500 * FROM tablo WHERE Kodu>@deger
    GO


    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...



    < Bu mesaj bu kişi tarafından değiştirildi un.real -- 3 Ağustos 2005, 8:51:29 >




  • Yapay Zeka’dan İlgili Konular
    Php header yardım!
    12 yıl önce açıldı
    Daha Fazla Göster
  • 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:
     
    CREATE PROCEDURE dbo.sp AS
    BEGIN
    DECLARE @deger nvarchar(100)
    DECLARE @query nvarchar(500)
    DECLARE @PK nvarchar(100)
    SET @PK = 'Kodu'
    SET @query = ''
    -- SET @deger = SELECT MAX(Kodu) FROM tablo
    --yukarıda comment durumundaki satır düzgün çalışıyor ama benim şuna ihtiyacım var:
    -- SET @query = 'SET @deger = SELECT MAX('+@PK+') FROM tablo'
    EXEC(@query)
    PRINT @deger
    END


    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
  • veya id sütununu yok edip tekrar yaratman olayı çözebilir
  • 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!
  • Arkadaslar sorunu cozduk..
    my limit x,x || ms top x
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.