2013-06-03 27 views
3

这是事情:我有2个数据库ADatabaseCX和ADatabaseRH。数据库是相同的。我在两个数据表中都有一些记录。我想要做的是从ADatabaseCX插入条目到ADatabaseRH,但只有条目,不存在于ADatabaseRH - 在RH有不完整的数据。在两个独立的数据库中的两个相等的数据库之间的SQL复制独特的记录

我试图与嵌套的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. 任何帮助将不胜感激。

回答

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后都不再有效,这就是为什么您会收到该错误消息。

+0

谢谢!因为你是第一个回答的人,所以我将你的文章标记为答案。再次感谢。 – CyberHawk

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 
) 
+0

感谢您的回答。因为我只能将一个帖子标记为答案(因为它也是正确的答案),我会加注你的帖子。谢谢! – CyberHawk

+0

@Cyber​​Hawk - 不用担心,很高兴我们可以帮忙! – sgeddes

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 

编辑!

+0

感谢您的回答。因为我只能标记一个帖子作为答案,所以我会加注你的帖子(因为它也是答案)。谢谢! – CyberHawk

相关问题