Temelde SQL Server 2008 R2 veritabanına sahibim. Veritabanında Düğüm ve Bağlantı adlı bir tablo var. Bağlantı, Düğümdeki bir Kimlikle ilgili bir StartNodeId ve EndNodeId içerir. Veritabanında ayrıca, Düğüm ve Bağlantı arasında daha hızlı bir denetim için bir Bağlantı tablosu, bu Bağlantı ile ilgili bu Düğüm veya bu Bağlantı ile ilgili düğümler bulunmaktadır. Bağlantı tablosu bir Kimlik anahtarı, NodeId ve LinkId içerir. Ben Birden çok güncelleştirme ve ekleme ile birleştirin
MERGE INTO [RoadRoutingDatabase].[dbo].[NodeToLink] AS TARGET
USING (SELECT Id, StartNodeId, EndNodeId FROM [RoadRoutingDatabase].[dbo].[Link]) AS SOURCE
ON (TARGET.LinkId = SOURCE.Id)
WHEN MATCHED AND TARGET.NodeId = Source.StartNodeId THEN
UPDATE SET TARGET.NodeId = SOURCE.StartNodeId,
TARGET.LinkId = SOURCE.Id
WHEN MATCHED AND TARGET.NodeId = Source.EndNodeId THEN
UPDATE SET TARGET.NodeId = SOURCE.EndNodeId,
TARGET.LinkId = SOURCE.Id
WHEN NOT MATCHED BY TARGET AND TARGET.NodeId = Source.StartNodeId THEN
INSERT (LinkId, NodeId)
VALUES (SOURCE.Id, SOURCE.StartNodeId)
WHEN NOT MATCHED BY TARGET AND TARGET.NodeId = Source.EndNodeId THEN
INSERT (LinkId, NodeId)
VALUES (SOURCE.Id, SOURCE.EndNodeId)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
ben "An hata mesajı almak çalıştım ben
çalışıyorum ne mümkün görünmüyor ifadeleri birleştirme kullanmaya çalışıyorum benim ekler yapıyorum ne zaman sorunudur 'ZAMAN KAZANMIŞ' türü eylemi, birleştirme bildiriminin "UPDATE" yan tümcesinde bir kereden fazla görünemez "
Eğer Başlangıç Düğümleri ve Bitiş Düğümlerini ayrı ayrı eklemeye çalışırsam Ben bağlantıları ile sona
--Insert Start Node To Link Relationships
MERGE INTO [RoadRoutingDatabase].[dbo].[NodeToLink] AS TARGET
USING (SELECT Id, StartNodeId FROM [RoadRoutingDatabase].[dbo].[Link]) AS SOURCE
ON (TARGET.NodeId = SOURCE.StartNodeId AND TARGET.LinkId = SOURCE.Id)
WHEN MATCHED THEN
UPDATE SET TARGET.NodeId = SOURCE.StartNodeId,
TARGET.LinkId = SOURCE.Id
WHEN NOT MATCHED BY TARGET THEN
INSERT (LinkId, NodeId)
VALUES (SOURCE.Id, SOURCE.StartNodeId)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
--Insert End Node To Link Relationships
MERGE INTO [RoadRoutingDatabase].[dbo].[NodeToLink] AS TARGET
USING (SELECT Id, EndNodeId FROM [RoadRoutingDatabase].[dbo].[Link]) AS SOURCE
ON (TARGET.NodeId = SOURCE.EndNodeId AND TARGET.LinkId = SOURCE.Id)
WHEN MATCHED THEN
UPDATE SET TARGET.NodeId = SOURCE.EndNodeId,
TARGET.LinkId = SOURCE.Id
WHEN NOT MATCHED BY TARGET THEN
INSERT (LinkId, NodeId)
VALUES (SOURCE.Id, SOURCE.EndNodeId)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
Herkes bunu iyi yol bildiğini eğer öyleyse temelde merak ediyorum (şaşırtıcı değil) silinmesini? Hala birleştirme deyimini
Teşekkür
Edit
kullanarak bunu yapmak mümkün olmak istiyorum Mümkünse: Farklı bir kaynağı kullanarak bu verileri birleştirme farklı bir yol bulduk, problem çözüldü.
Neden 'TARGET.NodeId' öğesini güncelleştiriyorsunuz? Test etmeye çalıştığınız gibi aynı şeyi güncellemek istiyorsunuz. –