2016-11-10 73 views
-1

我正在寻找一种方法来循环访问一个SQL表并将它与另一个表进行比较,如果两个列值匹配,则更新一个表中的记录。如何查找SQL中的匹配记录,如果发现然后更新

我有两个表HplcDataDeSchedule,Deschedule具有HplcData表将具有的所有未来记录。我想要一个SQL查询,该查询将在HplcData中查找Deschedule表中的匹配记录,并且如果更新Deschedule中的记录与来自HplcData的数据并且标记完成。通过具有相同的BatchIdSampleAge来定义匹配。

我该如何做到这一点?

Hplc Data 

BatchID | SampleAge | Ethanol | Glucose 
7254  20   7.8  4.5 

DeSchedule 

BatchID | SampleAge | Ethanol | Glucose | SampleCompleted 
7254  20   Null  Null  Null 
7254  30   Null  Null  Null 

所以截至目前我有一个触发器,做到这一点,但我需要一个方式,如果触发错过了记录调和的数据,我将运行此查询是一个窗口的工作。

这是我目前使用的触发查询:

ALTER TRIGGER [dbo].[Trigger_HPLC_update_details_DeSchedule] ON [dbo].[HplcData] 
    AFTER INSERT 
AS 
BEGIN 
    DECLARE @BatchId int, @Ethanol varchar(10), @Glucose varchar(10), @SampleAge varchar(10); 
    SELECT @BatchId = bd.[BatchID],@Ethanol = [Ethanol], @Glucose= [DP1Glucose], @SampleAge = bd.SampleAge 
    from INSERTED bd 
    update [dbo].[DeSchedule] SET [Ethanol] = @Ethanol, [Glucose] = @Glucose, [SampleCompleted] = 1 
    WHERE [BatchID] = @BatchId AND [SampleAge] = @SampleAge 
END 
+0

[SQL更新从一个表到另一基于一个ID匹配](HTTP的可能的复制:// stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match) – xQbert

回答

1

您可以使用MERGE语句。

沿东西:

MERGE INTO dbo.DeSchedule as Target USING (dbo.HplcData) as Source 
ON Source.BatchID = Target.BatchID and Source.SampleAge = Target.SampleAge 
WHEN MATCHED 
UPDATE Ethanol = source.Ethanol, Glucose = source.Glucose, SampleCompleted = 1; 
0

使用在可能重复的链接:

UPDATE DeSchedule A 
SET A.Ethanol = HP.Ethanol, 
    A.Glucose = HP.Glucose 
FROM HPLCdata HP 
INNER JOIN DeSchedule DS 
    on HP.BatchID = DS.BatchID 
    and HP.SampleAge = DS.SampleAge 
相关问题