如何仅使用新值或更改值更新表?

时间:2011-02-11 07:53:18

标签: sql sql-server

这是我的查询,但它会产生大量的双打,我需要插入新的和(可能)更新更改的值。

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

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

谢谢。

2 个答案:

答案 0 :(得分:2)

假设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]);

答案 1 :(得分:1)

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

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语句