2011-02-11 92 views
0

這是我的查詢,但它使很多雙打,我需要插入新的(也許)更新更改值。如何僅用新值或更改值更新表?

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

我的問題是我需要比較不是單一的價值,我需要整個節點比較3個值,以檢查是否有現有的。

謝謝。

回答

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聲明

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