首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将非重复记录插入到具有更新日期的复制表中。

将非重复记录插入到具有更新日期的复制表中。
EN

Stack Overflow用户
提问于 2020-07-01 18:32:47
回答 2查看 33关注 0票数 0

我目前正在从事一个项目,其中我有2个Server数据库,需要将新记录复制到归档数据库中,并附加更新日期。示例:

现有DB: dbo.A.Category(Id, Name)

将新记录(无副本)复制到:

存档数据库: dbo.B.Category(Id, Name, ArchiveDate)

如何仅将已更改的记录从现有数据库复制到归档数据库?这在Server中。

EN

回答 2

Stack Overflow用户

发布于 2020-07-01 18:59:18

为此,可以使用for运算符。例如:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2020-07-02 11:40:02

您可以通过一个MERGE语句来实现这一点。

我对你想要达到的目标做了以下假设:

dbo.B.Category

  • you中的[Id]列包含唯一的值

  • dbo.B.Category中的[Id]列不是标识列,而值对应于匹配的dbo.A.Category中的[name]值,而不是如果它们被更新为相同的值(例如,如果'Bob‘被更改为’Bob‘)H 215H 116您不希望同样地从dbo.B.Category

中删除D17中的行

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62683286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档