sql server procedür hakkında yardım

chnkyn
12-01-2018, 08:11   |  #1  
chnkyn avatarı
OP Taze Üye
Teşekkür Sayısı: 1
16 mesaj
Kayıt Tarihi:Kayıt: Eki 2017

2 adet stored procedürüm var.

1 tanesinin içinde bir kontrol yapıyorum if ile.eğer kontrol true ise (exec sp2) şeklinde 2.procedürü çağırıyorum.

2.procedür içinde yapmak istediklerim ise ;

1- önce x tablosunun ilk kaydının id numarasını alıyorum.(örn 1)

2-sonra yine x tablosunun son kaydının id numarasını alıyorum ( örn 1000)

3- önceden tanımladığım değişkeni bu aralıka gelecek şekilde random atıyorum while döngüsü ile ( set @degisken=rand() * ustId ) şeklinde

4- x tablosuna gidip(aynı tablo) Id =@değişken olan kaydın bilgilerini çekip başka bir değişkene atamak istiyorum.örn adı gibi

sorun burada işte id si bu olan kaydın bilgileri ... şeklinde geliyor.sanırım kayıdı bulamıyor.ama herhangi bir hata da vermiyor.

altid ve üst idleri değişik şekillerde bulmaya çalıştım.altid de sorun yok ama üst id de tutarsızlık var.

select top 1 @altId=Id from X ; şeklinde alt id bulunuyor

üst id yi

select top 1 @ustId=Id from X order by Id desc ; şeklinde buluyorum.

X tablosunda 500 kayıt var diyelim

üstid yi üstteki şekilde yapınca bana 500 ü aşan bir değer veriyor .procedür içinde breakpoint ile adım adım gittiğimde 500 ü aşan bir değer ( 2000 gibi ) veriyor bana.

id si üstid olan kayıdın bilgilerini böylece çekemiyorum yani.

ayrıca üstid yi

select @ustID= IDENT_CURRENT('X') ; şeklinde de çekmeye çalıştığımda hem ayrı bir sorgu içinde yazdığımda , hem de procedür içinde yazdığımda kayıt sayısından fazla bir değer veriyor bana.

cevaplayacak kişinin bunu da bilmesinde fayda var

procedür 1 den procedür 2 ye geçmeden önce X tablosuna kayıtlar ekliyorum.ve proc 1 tamamen transaction içinde yani hata çıkarsa işlem geri alınacak.

örn X tablosunda önceden 500 satır var diyelim.proc1 çalıştı 500 daha ekledim.sonra proc 2 yi çağırdım.orada X tablonun üst id si 1000 görünüyor.ama random ile seçilen bir satır 600 geldi varsayarsak tekrar x tablosuna id si 600 olanı arattığımda sanırım kayıdı bulamıyor.

sorunu örnekler ile açıklamaya çalıştım.her 2 procedürde epey kod olduğundan ayrı ayrı yazmak istemiyorum.sanırım bağlantısız yaparsam sorun çıkmayacak ama bu kadar kodu tekrar yazmak istemiyorum.

hata yaptığım yeri bulabilen lütfen söyleyebilir mi? tam 5 saattir bu sorun ile uğraşıyorum.