2011-05-17 80 views
0

我在我的服務器上有兩個數據庫:當前數據庫(我們稱之爲CurrentDB)和另一個從備份CurrentDB恢復的數據庫(讓我們稱它爲BackupDB)。從備份中更新當前數據庫中的數據:跨DB子查詢返回大於1的值

在特定的表中有一個特定的text列,對於某些行,我需要通過將它們連接在一起來合併行的舊版本的數據。

update CurrentDB.dbo.FormFieldData 
Set [Text] = (
    select ffd.[Text] 
    from BackupDB.dbo.FormFieldData as ffd 
    where ffd.FormFieldDataID = FormFieldDataID 
    ) 
where FormFieldDataID in (
    select ffd.FormFieldDataID 
    from BackupDB.dbo.FormFieldData as ffd 
    join BackupDB.dbo.FormFields as ff on ffd.FormFieldID = ff.FormFieldID 
    join BackupDB.dbo.FormData as fd on ffd.FormDataID = fd.FormDataID 
    where ff.FormID = 1 
      and ffd.FormFieldID = 2 
      and fd.UserID = 3 
      and Text like '%john smith%' 
) 

(在FormFieldData表的兩個版本,FormFieldDataID是主鍵)

只是爲了確保子查詢我想出了工作,我在Begin/Rollback區域跑這

不幸的是,運行此原因:Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

我敢肯定有一些簡單的我失蹤,但我不明白爲什麼第一個子查詢可以永遠返回多個值。

我錯過了什麼?

回答

1

在子查詢中,列名默認爲內部表,所以基本上評估1 = 1,從而返回所有行。嘗試做一個謂詞,如:

where ffd.FormFieldDataID = CurrentDB.dbo.FormFieldData.FormFieldDataID 
+0

啊!我本來曾考慮過這個問題,但因爲我無法在「更新

」聲明中設置別名而被駁回。沒有想到由於某種原因明確陳述表格細節。謝謝! – adamjford2011-05-17 17:51:03

相關問題