Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 将列数据从一个数据库传输到另一个数据库_Database_Sql Server 2005_Tsql - Fatal编程技术网

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

Database 将列数据从一个数据库传输到另一个数据库,database,sql-server-2005,tsql,Database,Sql Server 2005,Tsql,我正试图将整个专栏的数据从备份数据库传输到当前的生产数据库(当天早些时候,我在生产中用一个糟糕的更新破坏了这个专栏)。我正在使用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 [DB

我正试图将整个专栏的数据从备份数据库传输到当前的生产数据库(当天早些时候,我在生产中用一个糟糕的更新破坏了这个专栏)。我正在使用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威胁,我运行了这个查询。谢谢有关固定查询,请参见下文

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

问题是我没有在update和set语句中使用自己声明的别名。我甚至在声明alias之前都不知道你应该使用它。

也许你应该创建这个列

输入以下内容:

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

您看到名为column1的列了吗?

也许您应该创建该列

输入以下内容:

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

是否看到名为column1的列?

假设column1是该列的真实名称,则问题可能是您在选择中使用了别名,但在更新中没有使用别名

下面是它的外观…我还使用了一种新的样式连接

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

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

下面是它的外观…我还使用了一种新的样式连接

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
最好是

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
最好是

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

也可能是因为别名也可能是因为别名我在from语句中定义别名,因此我认为这不是问题所在。更新了一个示例,您可以运行该示例,以便您可以看到问题所在isI在from语句中定义别名,所以我不认为这是问题所在。更新了一个示例,您可以运行它,这样您就可以看到问题所在issql不会从上到下运行。例如,在选择之前运行from…sql不会从上到下运行。例如,from在选择之前运行。。。