【问题标题】:Transfer column data from one database to another将列数据从一个数据库传输到另一个数据库
【发布时间】:2010-09-01 22:52:14
【问题描述】:

我正在尝试将整个列的数据从备份数据库传输到当前的生产数据库(当天早些时候,我在生产中因更新错误而破坏了此列)。我正在使用 MS SQL Server 2005。

在本例中,我试图将“Column1”从 DB2.Table1 恢复到 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

问题是我没有在我的更新和设置语句中使用我自己声明的别名。在声明之前,我不知道您应该使用 alias'。

【问题讨论】:

  • sql 不会从上到下运行..例如 FROM 在 SELECT 之前运行...

标签: database sql-server-2005 tsql


【解决方案1】:

假设 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

这是一个你可以运行的例子

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

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

【讨论】:

  • 我在 from 语句中定义了别名,所以我认为这不是问题。
  • 更新了一个你可以运行的例子,这样你就可以看到问题出在哪里
【解决方案2】:

也许您应该创建该列?

输入以下内容:

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

您是否看到名为 column1 的列?

【讨论】:

  • 也可能是因为别名
【解决方案3】:
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

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 2016-07-28
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多