这是我的查询,但它会产生大量的双打,我需要插入新的和(可能)更新更改的值。
INSERT INTO [FRIIB].[dbo].[ArchiveAnalog]
(Date, ID, Value)
SELECT Date, ID, Value
FROM [LinkedOne].[FRIIB].[dbo].[ArchiveAnalog]
我的问题是我需要比较不是单个值,我需要将整个节点与3个值进行比较,以检查是否存在。
谢谢。答案 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
语句