将列数据从一个数据库传输到另一个数

时间:2010-09-01 22:52:14

标签: database sql-server-2005 tsql

我正在尝试将整个列的数据从备份数据库传输到当前的生产数据库(当天早些时候我在生产中破坏了这个列并且更新了一次)。我正在使用MS SQL Server 2005。

在这个例子中,我试图将DB2.Table1中的'Column1'恢复为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 Menace我运行了这个查询。谢谢!请参阅下面的固定查询

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

问题是我在更新和设置语句中没有使用我自己声明的别名。在他们被宣布之前,我不知道你应该使用别名。

3 个答案:

答案 0 :(得分:3)

假设column1是该列的真实名称,那么问题可能是您在select中使用了别名但未在更新中使用

这里应该是什么样的......我还使用了新的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

以下是您可以运行的示例

首先运行它来创建这两个表

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

Msg 4104,Level 16,State 1,Line 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

答案 1 :(得分:0)

也许你应该创建这个列?

输入以下内容:

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

你看到一个名为column1的列吗?

答案 2 :(得分: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