2011-05-17 29 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