2009-11-25 4 views
0

Я отчаянно пытается создать финальный стол для производства envirnment, однако Im возникли некоторые проблемы ....заявление Sql Update выдает

У меня есть 2 таблицы в моей базе данных. MyTable имеет тот же формат, что и другой (AnotherTable). AnotherTable имеет последнее значение, которое я хотел бы быть в MyTable.

Я пытаюсь обновить значение gq MyTable, чтобы оно было равно значению в значении gq другого значения. Я больше не могу использовать AnotherTable в производстве, потому что это архивные данные ...

Таким образом, моя забота. Я написал инструкцию обновления (ниже), которая пытается это сделать. Проблема в том, что я не хочу обновлять каждую строку MyTable каждый раз, когда вызывается это обновление. Мое предложение 2nd where бросает ошибку «множественный идентификатор не может быть связано». Тем не менее, мне нужно иметь предложение 2nd where, чтобы убедиться, что я не обновляю всю информацию о базе данных сразу.

Пожалуйста, помогите! Я до сих пор чувствую себя как NEWB

UPDATE MyTable 
SET MyTable.gq= 
    (select top 1 ANotherTable.GQ as gq 
    from AnotherTable , MyTable 
    WHERE CONVERT(VARCHAR(MAX), AnotherTable.UniqueTextField)= MyTable.uniqueVarCharField 
    ) 
WHERE CONVERT(VARCHAR(MAX), AnotherTable. UniqueTextField) 
     = MyTable.uniqueVarCharField 

ответ

1
UPDATE 
    M 
SET 
    MyTable.gq = A.gq 
FROM 
    MyTable M 
    JOIN 
    AnotherTable A ON CONVERT(VARCHAR(MAX), A.UniqueTextField)= M.uniqueVarCharField 

Соединить ограничат где он соответствует.

Однако вам может понадобиться дополнительные фильтры в ИНЕКЕ или более РЕГИСТРИРУЙТЕСЬ условия Это все равно будет обновлять каждую строку, где таблицы пересекаются

+0

Почему это выберите больше строк, чем необходимо? И как я могу заставить его обновлять только те строки, которые я хочу? – rockit

+0

Вы должны фильтровать строки, которые хотите обновить, а не все соответствующие строки. Пример: есть ли в таблицах общий ключ? – gbn

0

Ваши две таблицы просто нужно присоединиться:

UPDATE m SET m.Field = o.Field 
FROM MyTable m INNER JOIN otherTable o ON m.JoinedField=o.JoinedField 
Смежные вопросы