INSERT INTO archiveCategory (id,name,creationdate)
SELECT id,name,current_timestamp
FROM (
SELECT id,name
FROM myDB.dbo.category
EXCEPT
SELECT id,name
FROM archiveDB.dbo.category
WHERE creationdate = (SELECT max(creationdate) from archiveDB.dbo.category a2 where a.id = a2.id )
) delta
2条答案
按热度按时间uz75evzq1#
对此,可以使用except运算符。例如:
hmmo2u0o2#
你可以通过
MERGE
声明。我对你想要达到的目标做了以下假设:
这个
[Id]
中的列dbo.A.Category
包含唯一值这个
[Id]
中的列dbo.B.Category
不是标识列,并且值对应于匹配[Id]
中的值dbo.B.Category
你只关心更新[name]
中的值dbo.A.Category
已更改,而不是使用相同的值更新(例如,如果“bob”更改为“bob”,则不会更改)不希望从中删除行
dbo.A.Category
同样从dbo.B.Category
```MERGE dbo.B.Category AS tgt
USING dbo.A.Category AS src
ON tgt.[Id] = src.[Id]
WHEN MATCHED
AND tgt.[Name] <> src.[Name]
THEN UPDATE
SET [Name] = src.[Name]
, [ArchiveDate] = SYSDATETIME()
WHEN NOT MATCHED BY TARGET
THEN INSERT ( [Id], [Name], [ArchiveDate] )
VALUES ( src.[id], src.[name], SYSDATETIME() ) ;
GO