繁体   English   中英

如何只用新值或更改值更新表?

[英]How to update table with only new or changed values?

这是我的查询,但它会产生很多双打,因此我需要插入新值,并(可能)更新更改后的值。

INSERT INTO [FRIIB].[dbo].[ArchiveAnalog] 
                        (Date, ID, Value)
                        SELECT Date, ID, Value
                            FROM [LinkedOne].[FRIIB].[dbo].[ArchiveAnalog]

我的问题是我需要不比较单个值,我需要比较整个节点和3个值以检查是否存在。

谢谢。

假设SQL Server 2008或更高版本,请使用MERGE

MERGE INTO [FRIIB].[dbo].[ArchiveAnalog] 
USING (
       SELECT [Date], ID, [Value]
         FROM [LinkedOne].[FRIIB].[dbo].[ArchiveAnalog]
      ) AS source ([Date], ID, [Value])
   ON [Date] = source.[Date]
      AND ID = source.ID
      AND [Value] = source.[Value]
WHEN NOT MATCHED THEN
   INSERT ([Date], ID, [Value])
      VALUES ([Date], ID, [Value]);

要插入缺少的值,请执行以下操作

INSERT INTO [FRIIB].[dbo].[ArchiveAnalog] (Date, ID, Value)
SELECT  laa.Date, laa.ID, laa.Value
FROM    [LinkedOne].[FRIIB].[dbo].[ArchiveAnalog] laa
        LEFT OUTER JOIN [FRIIB].[dbo].[ArchiveAnalog] aa ON aa.Date = laa.Date
                                                            AND aa.ID = laa.ID
                                                            AND aa.Value = laa.Value
WHERE   aa.ID IS NULL                                                            

要更新现有值,您可能需要查看MERGE语句

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM