2012-08-01 82 views
1

我已经按照从其他张贴的例子来实现这一点,但我得到了以下错误:更新表列

The objects "otherDB.dbo.someTable" and "someDB.dbo.someTable" in the FROM clause have the same exposed names. Use correlation names to distinguish them.

这里的SQL语句

UPDATE [someDB].[dbo].[someTable] 
SET [someDB].[dbo].[someTable].[Name] = [otherDB].[dbo].[someTable].[Name] 
FROM [someDB].[dbo].[someTable] 
INNER JOIN [otherDB].[dbo].[someTable] 
    ON [someDB].[dbo].[someTable].[ID] = [otherDB].[dbo].[someTable].[ID] 

正如你所看到的,我简单地想更新[Name][someBD].[someTable][otherDB].[someTable]

从我能看到在其他类似的查询,这应该工作,但我想知道我是否需要做一些不同的事情,因为它来自不同的数据库?

任何指针/非常赞赏。

+0

如果这个数据库在同一个服务器实例上,你应该没问题。 – JeffO 2012-08-01 16:06:13

回答

5

您是否尝试过使用别名?

UPDATE db1 
SET db1.[Name] = db2.[Name] 
FROM [someDB].[dbo].[someTable] db1 
INNER JOIN [otherDB].[dbo].[someTable] db2 
    ON db1.[ID] = db2.[ID] 
+0

使用db作为表的别名有点令人误解,但语法正确,+1,现在你得到的分数比我整天得到的还多。 – 2012-08-01 16:05:19

+0

@ t-clausen.dk我同意但我选择它来显示数据库之间的区别。 – Taryn 2012-08-01 16:06:51

+0

太棒了,我不知道 - 非常感谢:-) – JustinReid 2012-08-01 16:14:11

-1

尝试使用别名:

UPDATE 
[someDB].[dbo].[someTable] 
SET 
s.[someDB].[dbo].[someTable].[Name] = o.[otherDB].[dbo].[someTable].[Name] 
FROM 
[someDB].[dbo].[someTable] s 
INNER JOIN 
[otherDB].[dbo].[someTable] o 
ON 
s.[someDB].[dbo].[someTable].[ID] = o.[otherDB].[dbo].[someTable].[ID] 
+0

Humm我的别名有什么问题? – 2012-08-03 13:00:37

-1

嗯,错误消息是要求相关名称。我认为这意味着它希望你别名表名之一。试试这个:

UPDATE [someDB].[dbo].[someTable] 
SET [someDB].[dbo].[someTable].[Name] = T.[Name] 
FROM [someDB].[dbo].[someTable] 
INNER JOIN [otherDB].[dbo].[someTable] T 
    ON [someDB].[dbo].[someTable].[ID] = T.[ID]