2010-09-01 190 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 
相關問題