[MS SQL] Две одинаковые таблицы в разных схемах
От: teapot2  
Дата: 08.07.21 17:03
Оценка:
Добрый день.

Возникла передо мной такая задача:

Есть БД MS SQL, а в ней две схемы — s1, s2. В обоих схемах есть две (почти) идентичные таблицы с одним и тем же именем t. В обоих первичный ключ id int и есть еще некоторое поле данных some int. Необходимо выставить в таблице s2.t поле some равным такому же полю в таблице s1.t при одинаковых ключах. Вроде бы простая задача и мелкомягкая документация это подтверждает. Вот здесь () читаем:

UPDATE dbo.Table2   
SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB  
FROM dbo.Table2   
    INNER JOIN dbo.Table1   
    ON (dbo.Table2.ColA = dbo.Table1.ColA);  
GO


Применительно к нашему случаю это выглядит так:
UPDATE s2.t.some 
SET s2.t.some = s1.t.some
FROM s2.t INNER JOIN s1.t ON (s1.t.id = s2.t.id)
GO


Видите, код — прямо под копирку. Но не тут-то было: получаю ошибку

Сообщение 1013, уровень 16, состояние 1, строка 179
Объекты "s2.t" и "s1.t" в предложении FROM имеют одинаковые видимые имена. Используйте корреляционные имена, чтобы различать их.


Эта ошибка часто встречается у народа, но исключительно в контексте кратного джойна одной и той же таблицы, и в этом случае решается использованием алиасов в запросах. Но у меня же имена полностью квалифицированы! Совершенно не тот случай. И, предсказуемо, попытка использовать алиасы ни к чему хорошему не привела, хотя ошибку сервер выдавал уже другую. В общем, я перепробовал полтора десятка различных вариантов, но не один из них не сработал.

Кто-нибудь может привести рабочий пример?
Re: [MS SQL] Две одинаковые таблицы в разных схемах
От: Джеффри  
Дата: 08.07.21 17:21
Оценка: 73 (2) +2
Здравствуйте, teapot2, Вы писали:

T>Кто-нибудь может привести рабочий пример?


У меня ошибка воспроизвелась с оригинальным запросом (там только после UPDATE нужно имя таблицы указать, а не поля), но исчезла после применения алиасов.

UPDATE T1
SET T1.[some] = T2.[some]
FROM s2.t T1 INNER JOIN s1.t T2 ON T1.id = T2.id


Microsoft SQL Server 2017
Отредактировано 08.07.2021 17:22 Джеффри . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.