3

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

4

3 回答 3

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
)
于 2013-06-03T13:36:14.977 回答
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这就是您收到该错误消息的原因。

于 2013-06-03T13:36:45.493 回答
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

编辑:从外观上看,这晚了几分钟!

于 2013-06-03T13:39:17.313 回答