我的服务器上有两个数据库:当前数据库(让我们称之为CurrentDB
),另一个数据库是从CurrentDB
的备份恢复的(我们称之为BackupDB
)
特定表中有一个特定的text
列,对于某些行,我需要通过将它们连接在一起来合并来自旧版本行的数据。
为了确保我提出的子查询有效,我在Begin
/ Rollback
区域运行了这个:
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
是主键。)
不幸的是,运行此操作会导致:Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我确信我缺少一些简单的东西,但我不明白为什么第一个子查询可以返回多个值。
我错过了什么?
答案 0 :(得分:1)
在子查询中,列名默认为内部表,因此您基本上评估1 = 1,从而返回所有行。尝试制作一个谓词:
where ffd.FormFieldDataID = CurrentDB.dbo.FormFieldData.FormFieldDataID