Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQl Server Merge komutu
#1
herkese hayırlı günler diliyor yaşadığım bir sorunun çözümü için yardımınızı rica ediyorum.

SQl Server MERGE komutu ile ilgili sorunum , Söyle ki aşağıdaki gibi iki tablom var . ilgili kaynak dosyalar ve kullandığım kod aşağıdaki linkte mevcut bende ordan alarak kullandım.

SQl Server MERGE komutunun Kullanımı


Sorunum şu ki 2 tablom var bir tanesinde sadece işlem yapmak istediğim bilgiler var "Kaynak dosya" diye geçen tablo bu diğer tablo yani hedef tablosunda da başka bilgilerde var fakat ben sadece beni ilgilendiren yani kodu "2" olanlarla ilgileniyorum. işlem yaparken de sadece bunların üzerinde yapsın istiyorum. 

Bunun için  " ON (TARGET.ProductID = SOURCE.ProductID)  AND (TARGET.kod=2)  "  diye ekledim ama bir işe yaramadı.

Kullanımı ile ilgili yardımcı olabilecek arkadaşlar varsa sevinirim. Şimdiden herkese çok teşekkür ediyor ve iyi çalışmalar diliyorum.


MERGE Product_Source AS TARGET
USING Product_target    AS SOURCE 
ON (TARGET.ProductID = SOURCE.ProductID) AND (TARGET.kod=2)

WHEN MATCHED AND    ( (TARGET.ProductName <> SOURCE.ProductName) OR (TARGET.Rate <> SOURCE.Rate) )
THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName, TARGET.Rate = SOURCE.Rate 
WHEN NOT MATCHED BY TARGET  
THEN INSERT (ProductID, ProductName, Rate) VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate)
WHEN NOT MATCHED BY SOURCE 
THEN DELETE 

OUTPUT $action, 
DELETED.ProductID AS TargetProductID, 
DELETED.ProductName AS TargetProductName, 
DELETED.Rate AS TargetRate, 
INSERTED.ProductID AS SourceProductID, 
INSERTED.ProductName AS SourceProductName, 
INSERTED.Rate AS SourceRate;

5KphHt.png
Cevapla
#2
Merhaba su sekılde olmalı sanırım

MERGE Product_Source AS TARGET
USING Product_target    AS SOURCE 
ON (TARGET.ProductID = SOURCE.ProductID) 

WHEN MATCHED AND    ( (TARGET.ProductName <> SOURCE.ProductName) OR (TARGET.Rate <> SOURCE.Rate) ) AND (TARGET.kod=2)
THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName, TARGET.Rate = SOURCE.Rate 
WHEN NOT MATCHED BY TARGET  AND (TARGET.kod=2)
THEN INSERT (ProductID, ProductName, Rate) VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate)
WHEN NOT MATCHED BY SOURCE 
THEN DELETE

OUTPUT $action, 
DELETED.ProductID AS TargetProductID, 
DELETED.ProductName AS TargetProductName, 
DELETED.Rate AS TargetRate, 
INSERTED.ProductID AS SourceProductID, 
INSERTED.ProductName AS SourceProductName, 
INSERTED.Rate AS SourceRate;
Cevapla
#3
Çok teşekkürler Serdar Bey dener sonucu yazarım.

(08-10-2020, Saat: 17:16)serdar Adlı Kullanıcıdan Alıntı: Merhaba su sekılde olmalı sanırım

MERGE Product_Source AS TARGET
USING Product_target    AS SOURCE 
ON (TARGET.ProductID = SOURCE.ProductID) 

WHEN MATCHED AND    ( (TARGET.ProductName <> SOURCE.ProductName) OR (TARGET.Rate <> SOURCE.Rate) ) AND (TARGET.kod=2)
THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName, TARGET.Rate = SOURCE.Rate 
WHEN NOT MATCHED BY TARGET  AND (TARGET.kod=2)
THEN INSERT (ProductID, ProductName, Rate) VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate)
WHEN NOT MATCHED BY SOURCE 
THEN DELETE

OUTPUT $action, 
DELETED.ProductID AS TargetProductID, 
DELETED.ProductName AS TargetProductName, 
DELETED.Rate AS TargetRate, 
INSERTED.ProductID AS SourceProductID, 
INSERTED.ProductName AS SourceProductName, 
INSERTED.Rate AS SourceRate;

olmadı maalesef buna benzer bir kod denedim sanırım çünkü bu hatayı daha öncede almıştım.

Msg 5333, Level 16, State 2, Line 7
The identifier 'TARGET.kod' cannot be bound. Only source columns and columns in the clause scope are allowed in the 'WHEN NOT MATCHED' clause of a MERGE statement.
Cevapla
#4
(08-10-2020, Saat: 18:31)Bay_Y Adlı Kullanıcıdan Alıntı: Çok teşekkürler Serdar Bey dener sonucu yazarım.

(08-10-2020, Saat: 17:16)serdar Adlı Kullanıcıdan Alıntı: Merhaba su sekılde olmalı sanırım

MERGE Product_Source AS TARGET
USING Product_target    AS SOURCE 
ON (TARGET.ProductID = SOURCE.ProductID) 

WHEN MATCHED AND    ( (TARGET.ProductName <> SOURCE.ProductName) OR (TARGET.Rate <> SOURCE.Rate) ) AND (TARGET.kod=2)
THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName, TARGET.Rate = SOURCE.Rate 
WHEN NOT MATCHED BY TARGET  AND (TARGET.kod=2)
THEN INSERT (ProductID, ProductName, Rate) VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate)
WHEN NOT MATCHED BY SOURCE 
THEN DELETE

OUTPUT $action, 
DELETED.ProductID AS TargetProductID, 
DELETED.ProductName AS TargetProductName, 
DELETED.Rate AS TargetRate, 
INSERTED.ProductID AS SourceProductID, 
INSERTED.ProductName AS SourceProductName, 
INSERTED.Rate AS SourceRate;

olmadı maalesef buna benzer bir kod denedim sanırım çünkü bu hatayı daha öncede almıştım.

Msg 5333, Level 16, State 2, Line 7
The identifier 'TARGET.kod' cannot be bound. Only source columns and columns in the clause scope are allowed in the 'WHEN NOT MATCHED' clause of a MERGE statement.

bu satırı WHEN NOT MATCHED BY TARGET  AND (TARGET.kod=2) satırını source olarak degıstırıp deneyın

WHEN NOT MATCHED BY TARGET  AND (source.kod=2) 
kendı bılgısyarımda sımdı denedım hata cıkmadı. umarım calısması da dogru sonuc verır. sımdılık bır hata goremedım
Cevapla
#5
İlgi ve alakanız için teşekkür ediyorum. Örnek tablo için sonuç doğru umarım düşündüğümüz işlem içinde öyle olur. Çok sağolun tekrar.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Çözüldü - firedac phys odbc microsoft odbc sql server driver connection is busy with cinarbil 1 641 14-10-2025, Saat: 09:14
Son Yorum: hi_selamlar
Lightbulb Mssql ve MS Server Upgrade'i arikeness 1 820 01-08-2025, Saat: 11:22
Son Yorum: maxpaynen
  Sql Server Otomatik Kurulum narkotik 15 12.101 31-07-2024, Saat: 11:36
Son Yorum: Bay_Y
  Uzak Sunucuya (Server) Lokalden Veri Tabanı Oluşturma Hk. glagher 7 2.570 19-04-2024, Saat: 12:32
Son Yorum: glagher
  MS SQL Server - Arama Yaklaşık Değerleri Bulma hi_selamlar 5 2.640 17-01-2024, Saat: 22:53
Son Yorum: Mr.X



Konuyu Okuyanlar: 1 Ziyaretçi