SQL复制两个单独数据库中两个相等数据库之间的唯一记录

时间:2013-06-03 13:26:41

标签: sql select insert copy

这是事情:我有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。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

尝试使用此引用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
)

答案 1 :(得分: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 :(得分:1)

您的查询存在的问题是您已对表进行别名,但之后未在联接中使用这些别名。

试试这个:

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

编辑:看起来很晚几分钟就看出来了!