2013-06-03 64 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

相關問題