【问题标题】:SQL copy unique records between two equal databases in two separate databasesSQL 在两个独立数据库中的两个相等数据库之间复制唯一记录
【发布时间】:2013-05-29 16:05:35
【问题描述】:

事情是这样的:我有 2 个数据库 ADatabaseCX 和 ADatabaseRH。数据库是一样的。我在两个数据表中都有一些记录。我想做的是将 ADatabaseCX 中的条目插入到 ADatabaseRH,但只有条目,在 ADatabaseRH 中不存在 - 在 RH 中有不完整的数据。

我尝试使用嵌套 SQL,如下所示:

    SELECT a.* 
    FROM ADatabaseCX.dbo.Recipes AS a
    LEFT JOIN ADatabaseRH.dbo.Recipes AS b ON (ADatabaseCX.dbo.Recipes.recipeId = ADatabaseRH.dbo.Recipes.recipeId)
    WHERE b.recipeId IS NULL

但它说

    Msg 4104, Level 16, State 1, Line 3
    The multi-part identifier "ADatabaseCX.dbo.Recipes.recipeId" could not be bound.
    Msg 4104, Level 16, State 1, Line 3
    The multi-part identifier "ADatabaseRH.dbo.Recipes.recipeId" could not be bound.

拳头(第一个想法)我试过了

    SELECT * FROM ADatabaseCX.dbo.Recipes
    WHERE NOT EXISTS (SELECT recipeId FROM ADatabaseRH.dbo.Recipes)

但这没有返回任何记录。

在复制时,我还希望以保持 ID 不变的方式进行复制。

我使用的是 MS SQL Server 2008。 任何帮助将不胜感激。

【问题讨论】:

    标签: sql select insert copy


    【解决方案1】:

    问题是您在数据库名称上初始化ALIAS,但您没有在ON 子句中使用它,它应该是

    SELECT a.* 
    FROM   ADatabaseCX.dbo.Recipes AS a
           LEFT JOIN ADatabaseRH.dbo.Recipes AS b 
              ON a.recipeId = b.recipeId
    WHERE  b.recipeId IS NULL
    

    数据库名称和表名称在初始化 ALIAS 后不再有效,这就是您收到该错误消息的原因。

    【讨论】:

    • 谢谢!我将您的帖子标记为答案,因为您是第一个回答的人。再次感谢。
    【解决方案2】:

    尝试使用此引用 a.recipeIdb.recipeId

    SELECT a.* 
    FROM ADatabaseCX.dbo.Recipes AS a
    LEFT JOIN ADatabaseRH.dbo.Recipes AS b ON a.recipeId = b.recipeId
    WHERE b.recipeId IS NULL
    

    或者这也可以使用NOT IN

    SELECT * 
    FROM ADatabaseCX.dbo.Recipes 
    WHERE recipeId NOT IN (
        SELECT recipeId 
        FROM ADatabaseRH.dbo.Recipes
    )
    

    【讨论】:

    • 感谢您的回答。因为我只能将一篇帖子标记为答案(因为它也是正确答案),所以我会支持你的帖子。谢谢!
    • @Cyber​​Hawk -- 不用担心,很高兴我们能提供帮助!
    【解决方案3】:

    您的查询的问题是您为表设置了别名,但没有在连接中使用这些别名。

    试试这个:

    SELECT a.* 
    FROM ADatabaseCX.dbo.Recipes AS a
        LEFT JOIN ADatabaseRH.dbo.Recipes AS b ON (a.recipeId = b.recipeId)
    WHERE b.recipeId IS NULL
    

    编辑:看起来迟到了几分钟!

    【讨论】:

    • 感谢您的回答。由于我只能将一篇帖子标记为答案,因此我会为您的帖子投票(因为它也是答案)。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2022-01-22
    相关资源
    最近更新 更多