Arama butonu
Bu konudaki kullanıcılar: 1 misafir
13
Cevap
1914
Tıklama
0
Öne Çıkarma
MsSQL: Satır ID'leri (ROWID???)
U
20 yıl
Binbaşı
Konu Sahibi

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 >

4
20 yıl
Teğmen

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


Bu mesaja 1 cevap geldi.
U
20 yıl
Binbaşı
Konu Sahibi

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 ;)


Bu mesaja 1 cevap geldi.
4
20 yıl
Teğmen

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


Bu mesaja 1 cevap geldi.
U
20 yıl
Binbaşı
Konu Sahibi

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?


Bu mesaja 1 cevap geldi.
4
20 yıl
Teğmen

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


Bu mesaja 1 cevap geldi.
U
20 yıl
Binbaşı
Konu Sahibi

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 >
Bu mesaja 1 cevap geldi.
4
20 yıl
Teğmen

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


Bu mesaja 1 cevap geldi.
U
20 yıl
Binbaşı
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
T
20 yıl
Yüzbaşı

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


Bu mesaja 1 cevap geldi.
T
20 yıl
Yüzbaşı

veya id sütununu yok edip tekrar yaratman olayı çözebilir


Bu mesaja 1 cevap geldi.
U
20 yıl
Binbaşı
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
A
20 yıl
Teğmen

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!


Bu mesaja 1 cevap geldi.
A
20 yıl
Teğmen

Arkadaslar sorunu cozduk..
my limit x,x || ms top x



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.