从备份更新当前数据库中的数据:跨数据库子查询返回> 1值

时间:2011-05-17 17:41:01

标签: sql-server tsql sql-server-2008

我的服务器上有两个数据库:当前数据库(让我们称之为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.

我确信我缺少一些简单的东西,但我不明白为什么第一个子查询可以返回多个值。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

在子查询中,列名默认为内部表,因此您基本上评估1 = 1,从而返回所有行。尝试制作一个谓词:

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