2010-09-01 147 views
0

我试图将整个列的数据从备份数据库传输到当前生产数据库(早些时候我在生产中毁坏了此列,但更新有误)。我使用MS SQL Server 2005的将列数据从一个数据库传输到另一个

在这个例子中,我试图从DB2.Table1恢复 '列1' 到DB1.Table1:

begin transaction 

update [DB1].[dbo].[Table1] 
set [DB1].[dbo].[Table1].[Column1] = [DB2].[dbo].[Table1].[Column1] 
from [DB1].[dbo].[Table1] db1Alias, [DB2].[dbo].[Table1] db2Alias 
where db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 

commit transaction 

对于我这个查询返回:

多部分标识符 “DB2.dbo.Table1.Column1”不能被绑定到 。

任何帮助,将不胜感激。

谢谢!

编辑:

感谢SQL威胁我得到了这个查询运行。谢谢!见下面的固定查询

begin transaction 

update db1Alias 
set db1Alias.[Column1] = db2Alias.[Column1] 
from [DB1].[dbo].[Table1] db1Alias, [DB2].[dbo].[Table1] db2Alias 
where db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 

commit transaction 

问题是我没有使用我自己的声明别名在我的更新和设置语句。我甚至都不知道你应该使用别名“。

+0

SQL不从顶部到bottom..for例如FROM在SELECT ...之前运行 – SQLMenace 2010-09-02 00:17:06

回答

3

假设COLUMN1是列的真实姓名,那么问题可能是您使用在选择的别名,但不是在更新

这里是它应该是什么样子。我也用了新款JOIN

update db1Alias 
set db1Alias.[Column1] = db2Alias.[Column1] 
from [DB1].[dbo].[Table1] db1Alias 
JOIN [DB2].[dbo].[Table1] db2Alias ON db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 

这里是你可以运行

第一次运行这个创建这些2个表为例

use tempdb 
go 

create table BlaTest(id int) 
insert BlaTest values(1) 
go 

create table BlaTest2(id int) 
insert BlaTest2 values(1) 
go 

现在,当您尝试这样做

update tempdb.dbo.BlaTest 
set tempdb.dbo.BlaTest.id =tempdb.dbo.BlaTest2.id 
from tempdb.dbo.BlaTest b 
join tempdb.dbo.BlaTest2 a on b.id =a.id 

消息4104,级别16,状态1,行2
多部分标识符“tempdb.dbo.BlaTest2.id”无法绑定。

但是如果你使用的名称...没问题

update b 
set b.id =a.id 
from tempdb.dbo.BlaTest b 
join tempdb.dbo.BlaTest2 a on b.id =a.id 
+0

我在from语句中定义了别名,所以我不认为这是问题。 – phil 2010-09-01 23:23:26

+1

是的,但是您没有在更新中使用别名 – SQLMenace 2010-09-01 23:24:34

+0

已更新了可以运行的示例,以便您可以看到问题出在哪里 – SQLMenace 2010-09-01 23:28:59

0

也许你应该创建列?

输入以下内容:

select * from information_schema.columns 
where table_name = 'Table1' 

你看到一个名为列1列?

+0

也可能因为别名存在 – SQLMenace 2010-09-01 23:17:32

+0

列存在 – phil 2010-09-01 23:23:49

+0

列存在,这是更新期间非常常见的错误。 – Kashif 2010-09-01 23:40:12

0
update [DB1].[dbo].[Table1] 
set [DB1].[dbo].[Table1].[Column1] = db2Alias.[Column1] 
from [DB1].[dbo].[Table1] db1Alias, [DB2].[dbo].[Table1] db2Alias 
where db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 

更好的将是

update [DB1].[dbo].[Table1] 
set [DB1].[dbo].[Table1].[Column1] = db2Alias.[Column1] 
from [DB1].[dbo].[Table1] db1Alias INNER JOIN [DB2].[dbo].[Table1] db2Alias 
ON db1Alias.TeamId = db2Alias.TeamId 
and db1Alias.IndividualId = db2Alias.IndividualId 
相关问题