我正在尝试将整个列的数据从备份数据库传输到当前的生产数据库(当天早些时候我在生产中破坏了这个列并且更新了一次)。我正在使用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
问题是我在更新和设置语句中没有使用我自己声明的别名。在他们被宣布之前,我不知道你应该使用别名。
答案 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