Обновление данных в текущей БД из резервной копии: подзапрос между БД возвращает> 1 значение - PullRequest
0 голосов
/ 17 мая 2011

У меня есть две базы данных на моем сервере: текущая база данных (назовем ее 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 Ответ

1 голос
/ 17 мая 2011

В подзапросах имена столбцов по умолчанию соответствуют внутренней таблице, так что вы, по сути, оцениваете 1 = 1, возвращая все строки. Попробуйте создать предикат вроде:

where ffd.FormFieldDataID = CurrentDB.dbo.FormFieldData.FormFieldDataID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...