असल में मेरे पास एक SQL Server 2008 R2 डेटाबेस है। डेटाबेस में नोड और लिंक नामक एक टेबल है। लिंक में नोड में किसी आईडी से संबंधित StartNodeId और EndNodeId शामिल है। डाटाबेस को नोड और लिंक के बीच एक लिंक टेबल की त्वरित जांच के लिए भी लिंक की आवश्यकता होती है, क्या यह नोड इस लिंक से संबंधित है या नोड्स इस लिंक से संबंधित हैं। लिंक तालिका में एक पहचान कुंजी, नोडआईडी और लिंकआईडी शामिल है। मेरी समस्या है जब मैं अपने आवेषण कर रहा हूँ मैं जब मैं करने की कोशिश कीएकाधिक अपडेट और सम्मिलन के साथ विलय करें
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;
मैं त्रुटि संदेश मिलता है "एक बयान जो मैं क्या कोशिश कर रहा हूँ
करने के लिए सक्षम होने के लिए नहीं लग रहे विलय का उपयोग करने के कोशिश कर रहा हूँ 'WHEN MATCHED' प्रकार की कार्रवाई एक मेर्ज स्टेटमेंट के 'अद्यतन' खंड में एक से अधिक बार प्रकट नहीं हो सकती है "
यदि मैं प्रारंभ नोड्स और एंड नोड्स को अलग-अलग उदाहरणों को सम्मिलित करने का प्रयास करता हूं
--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;
मैं लिंक के साथ खत्म हटाया जा रहा है (आश्चर्य की बात नहीं) तो बुनियादी तौर पर मैं अगर कोई ऐसा करने का एक अच्छा तरीका है की जानता था सोच रहा था? मैं अभी भी किसी मर्ज कथन का उपयोग
धन्यवाद
संपादित करें यह करने के लिए सक्षम होने के लिए चाहते हैं यदि संभव हो तो: मैं एक अलग स्रोत का उपयोग इस डेटा को मर्ज करने का एक अलग तरीका मिल गया है, समस्या अब हल हो गया है।
आप 'TARGET.NodeId' को क्यों अपडेट कर रहे हैं? आप इसे ठीक उसी चीज़ पर अपडेट कर रहे हैं जैसा आप परीक्षण करने का प्रयास कर रहे हैं। –