Forum

Sql sorgusu isteği
 
Bildirimler
Hepsini Temizle

Sql sorgusu isteği

17 Yazılar
3 Üyeler
0 Reactions
3,098 Görüntüleme
(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Merhaba arkadaşlar;


update tbStokMuhasebeEntegrasyon set sSubeMagaza='M41'where tbStok.dteKayitTarihi='2010-07-14 00:51:54.920' 


bir sorgu deniyorum.Aşağıdaki hatayı veriyor.


Msg 4104, Level 16, State 1, Line 1


The multi-part identifier "tbStok.dteKayitTarihi" could not be bound.


İki tane tabloyu içinde barındıran bir sql sorgusunu ilk defa deniyorum.Yardımcı olur musunuz ?


 

 
Gönderildi : 14/09/2010 12:05

(@turgaysahtiyan)
Gönderiler: 344
Reputable Member
 

alias kullandığın için hata alıyorsun.

bu şekilde denersen çalışacaktır. 

update tbStokMuhasebeEntegrasyon set sSubeMagaza='M41'where dteKayitTarihi='2010-07-14 00:51:54.920'  

ya da illa alias kullanacam diyorsan

update tbStok set sSubeMagaza='M41' from tbStokMuhasebeEntegrasyon tbStok where tbstok.dteKayitTarihi='2010-07-14 00:51:54.920'   

şeklinde yapmalısın. 

 
Gönderildi : 14/09/2010 12:27

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Turgay Bey,


İlk örneğinizi denedim.Ama hata verdi.


dteKayitTarihi sütununun adında bir yanlışlık yok.Sorun ne olabilir.


Msg 207, Level 16, State 1, Line 2


Invalid column name 'dteKayitTarihi'.


 

 
Gönderildi : 14/09/2010 14:09

(@UfukDeniz)
Gönderiler: 95
Estimable Member
 

update tbStok set sSubeMagaza='M41' from tbStokMuhasebeEntegrasyon tbStok where tbstok.dteKayitTarihi='2010-07-14 00:51:54.920'   

 öncelikle yukarıdaki SQL de mantik hatasi olmus. tbStok tablosunu update etmek istemissiniz, fakat o tabloda ulmayan sSubeMagaza sutununu setlemeye calismissiniz. Zaten update etmeniz gereken tbStok degil, tbStokMyuhasebeEntegrasyon tablosu olmalıydı. Asagidaki SQL isinizi görecektir.

===================================================================
NOT : SQL'I CALISTIRMADAN ONCE MUTLAKA YEDEK ALINIZ. ! 
===================================================================

 Update tbStokMuhasebeEntegrasyon Set sSubeMagaza='M41' From tbStokMuhasebeEntegrasyon,tbStok 

Where tbStok.dteKayitTarihi={ts '2010-07-28 19:05:26.450'} And  tbStok.nStokID = tbStokMuhasebeEntegrasyon.nStokID 

 

 
Gönderildi : 14/09/2010 14:29

(@turgaysahtiyan)
Gönderiler: 344
Reputable Member
 

tablonuzda dteKayitTarih kolonu yok.

Tablolarınınız kolon bilgilerini ve update etmek istediğiniz bilginin tam olarak ne olduğunu belirtir misiniz.

 
Gönderildi : 14/09/2010 14:34

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Ufuk Bey;


Bu seferde aşağıdaki hatayı verdi


Msg 2627, Level 14, State 1, Line 1


Violation of PRIMARY KEY constraint 'PK__tbStokMuhasebeEn__66EA454A'. Cannot insert duplicate key in object 'dbo.tbStokMuhasebeEntegrasyon'.


The statement has been terminated.


 


 

 
Gönderildi : 14/09/2010 16:22

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Turgay Bey;


TbStok diye bir tablom var.Altında dteKayitTarih adında bir kolon var.Kaynağımız buradaki tarih oluyor.


TbStokMuhasebeEntegrasyon diye bir tablom daha var.Altında sSubeMagaza adında bir kolon var.Hedefimiz buradaki değeri update etmektir.

 
Gönderildi : 14/09/2010 16:26

(@turgaysahtiyan)
Gönderiler: 344
Reputable Member
 

Ufuk Bey;

Bu seferde aşağıdaki hatayı verdi

Msg 2627, Level 14, State 1, Line 1

Violation of PRIMARY KEY constraint 'PK__tbStokMuhasebeEn__66EA454A'. Cannot insert duplicate key in object 'dbo.tbStokMuhasebeEntegrasyon'.

The statement has been terminated.

 

 

 

dbo.tbStokMuhasebeEntegrasyon Tablosunda zaten  M41 değeri olduğu için ve unique primary keyden dolayı başka bir M41 değeri kabul etmemekte.

 
Gönderildi : 14/09/2010 16:49

(@UfukDeniz)
Gönderiler: 95
Estimable Member
 

Ondan kaynaklandığını düşünmüyorum, zira sSubeMagaza alanındaki Unique Key farkli bir tablo ile iliskili. Aynı SQL i deneyerek yazdim ve bende sorunsuz calisiyor. Tavsiyem 'PK__tbStokMuhasebeEn__66EA454A Key in hangi alanda olduğunu bulmaniz. Eger onu bulursaniz sonuca daha hizli ulasirsiniz. 

 
Gönderildi : 14/09/2010 17:34

(@turgaysahtiyan)
Gönderiler: 344
Reputable Member
 
Senin tablonda M41 yok ise duplicate hatası vermemesi normal bir davranıştır.
 
Hata unique primary key'den olmalı. Tam emin olmak için aşağıdaki 2 query'nin sonucunu gönderebilir misin bluess.
select OBJECT_NAME(i.object_id) as TableName, c.name as ColumnName, i.is_unique, i.is_primary_key, i.type, i.type_desc
from sys.indexes i
join sys.index_columns ic on ic.object_id=i.object_id and ic.index_id=i.index_id
join sys.columns c on c.object_id=i.object_id and c.column_id=ic.column_id
where i.object_id=object_id('tbStokMuhasebeEntegrasyon')
 
 
select * from tbStokMuhasebeEntegrasyon where sSubeMagaza='M41' 
 
Gönderildi : 14/09/2010 17:47

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Turgay bey;


İlk sorgunun sonucu bu çıktı


tbStokMuhasebeEntegrasyon nStokID 1 1 1 CLUSTERED tbStokMuhasebeEntegrasyon sSubeMagaza 1 1 1 CLUSTERED tbStokMuhasebeEntegrasyon nSubeMagazaHesapTipi 1 1 1 CLUSTERED tbStokMuhasebeEntegrasyon sHareketTipi 1 1 1 CLUSTERED tbStokMuhasebeEntegrasyon nSubeMagazaHesapTipi 0 0 2 NONCLUSTERED tbStokMuhasebeEntegrasyon sSubeMagaza 0 0 2 NONCLUSTERED tbStokMuhasebeEntegrasyon sHareketTipi 0 0 2 NONCLUSTERED tbStokMuhasebeEntegrasyon nStokID 0 0 2 NONCLUSTERED tbStokMuhasebeEntegrasyon nHesapID 0 0 2 NONCLUSTERED tbStokMuhasebeEntegrasyon nStokID 0 0 2 NONCLUSTERED tbStokMuhasebeEntegrasyon nSubeMagazaHesapTipi 0 0 2 NONCLUSTERED tbStokMuhasebeEntegrasyon sHareketTipi 0 0 2 NONCLUSTERED tbStokMuhasebeEntegrasyon sSubeMagaza 0 0 2 NONCLUSTERED


İkinci sorgu ise çok kabarık.

 
Gönderildi : 14/09/2010 19:00

(@turgaysahtiyan)
Gönderiler: 344
Reputable Member
 

Görünen o ki birden fazla kolon birleştirilerek bir primary key oluşturulmuş. Ayrıca tabloda bir de noncluster index var.

sadece unique primary key i sorgulamak için sorguya birde index name kriteri koyarak çekelim.

select OBJECT_NAME(i.object_id) as TableName, c.name as ColumnName, i.is_unique, i.is_primary_key, i.type, i.type_desc
from sys.indexes i
join sys.index_columns ic on ic.object_id=i.object_id and ic.index_id=i.index_id
join sys.columns c on c.object_id=i.object_id and c.column_id=ic.column_id
where i.object_id=object_id('tbStokMuhasebeEntegrasyon') and i.name='PK__tbStokMuhasebeEn__66EA454A'

 

 
Gönderildi : 14/09/2010 19:10

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Turgay Bey;


tbStokMuhasebeEntegrasyon nStokID 1 1 1 CLUSTERED
tbStokMuhasebeEntegrasyon sSubeMagaza 1 1 1 CLUSTERED
tbStokMuhasebeEntegrasyon nSubeMagazaHesapTipi 1 1 1 CLUSTERED
tbStokMuhasebeEntegrasyon sHareketTipi 1 1 1 CLUSTERED


 


çıktı.Ben basit bir şey sandım ama değil galiba.Sizleride sıktı ise konuyu kapatabilirim.

 
Gönderildi : 14/09/2010 19:23

(@turgaysahtiyan)
Gönderiler: 344
Reputable Member
 
şimdi aslında işlem basit. sonuçta bir update yapacaksın 🙂 ama sıkıntı olan nokta unique primary keyden dolayı hata alıyor olman.
biraz açıklama yapayım ki hatanın nerden kaynaklandığını tam olarak anlatalım.
yukarıdaki en son sorguda tbStokMuhasebeEntegrasyon tablosunda bulunan PK__tbStokMuhasebeEn__66EA454A key'ini sorguladık.
sorgu sonucunda bu key in cluster primary key olduğunu ve unique olduğunu gördük. Ayrıca bu primary key toplamda 4 kolon içermekteymiş.
 
Şimdi bu ne demek biraz daha açalım. Unique primary key aynı değerden yalnızca bir tane içerebilir. Yani senin primary key örneğinde StokID, SubeMagaza, SubeMagazaHesapTipi ve HareketTipi kolonuna aynı değer içeren sadece bir kayıt olabilir. Bir 2.cisini insert etmeye çalıştığında hata verir. Yani diyelimli StokID 15, SubeMagaze 'abc', SubeMagazaHesapTipi 'd', HareketTipi 'e' değerlerini içeren bir kayıtın var. Bu kayıtın aynısından bir tane daha girersen unique hatası verir. Ama bu 4 kolondan birini dahi değiştirsen insert yapabilirsin.
 
Senin update etmeye çalıştığın sorgunda update olan kayıt'lardan bir tanesi bu kuralı bozmakta ve aynı değerleri içeren bir kayıtı daha insert etmeye çalıştığı için hata almakta.
 
umarım açıklayıcı olmuştur 🙂 
 
Gönderildi : 14/09/2010 19:43

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Turgay Bey;


İlginize çok teşekkür ederim.Konuyu anladım.Elinize sağlık.Bu arada insert triggeri araştırdım ama biraz kafam karıştı.


Ben muhasebeciyim.Sqldende çat pat anlıyorum.Nebime geçtik.Stok kartlarını açtıktan sonra ikinci işlem olarak muhasebe bağlantılarını yapmak gerekiyor.Fakat stok kartını açmak 1 dakika,entegresini yapmak 2 saat.Nedeni 20 tane mağaza için 40 tane farklı entegrasyon yapılmak zorunda olduğu için.


Stok kartları bir tabloda tutuluyor.Entegrasyonları ayrı bir tabloda.Aklıma şöyle bir fikir geldi.Gece saat 12.00 de,gün içinde açılan stok kartlarını ayrı bir tabloya insert trigger ile almak.Aldıktan sonra bu tabloda bulunan stok kartlarının,önceden oluşturmuş olduğum join sorguları ile entegrasyon tablosuna kayıtlarını eklemek.


Yardım edebilir misiniz ? Eğer olumlu düşünürseniz size tablo isimlerini ve sütun adlarını vereyim.İnsert triggeri oluşturalım.

 
Gönderildi : 15/09/2010 04:13

(@turgaysahtiyan)
Gönderiler: 344
Reputable Member
 

merhaba,

şu başlıkta buna benzer bir konu için bir akradaşa yardımcı olmuştum. Bir incele istersen.

http://www.cozumpark.com/forums/thread/201158.aspx  

Bu arada Nebim DB'sinde onların izni olmadan değişiklik yapman programı unsupported hale getirebilir. Bu konuyu nebim ile görüşmende fayda var bence.

 
Gönderildi : 15/09/2010 12:19

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Turgay bey,


 O arkadaş bendim zaten 🙂 Biraz daha inceleyim konuyu

 
Gönderildi : 15/09/2010 13:24

Paylaş: