Forum
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 ?
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.
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'.
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
tablonuzda dteKayitTarih kolonu yok.
Tablolarınınız kolon bilgilerini ve update etmek istediğiniz bilginin tam olarak ne olduğunu belirtir misiniz.
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.
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.
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.
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.
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ö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'
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.
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.
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.
Turgay bey,
O arkadaş bendim zaten 🙂 Biraz daha inceleyim konuyu