Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Error 117  [new]
Alexei Petrakov
Member

Откуда: Москва
Сообщений: 42
Есть две таблицы с одинаковой структурой: два целочисленных поля; составной первичный ключ (из обоих этих полей).
Например:
T1

F1 F2
1 1
1 2
2 1
2 2

T2
F1 F2
1 2
2 1


Надо удалить все записи из T1 для которых нет соответствующих записей в T2.

Запрос-то я составил. Но проблема в том, что эти две таблицы расположены на разных серверах, а сам запрос выполняется вообще на третьем сервере (то есть, на сервере1 есть LinkedServers для сервера2 и сервера 3; данные лежат на 2-ом и 3-ем, запрос выплняется на 1-ом).
Вот сам запрос (выполняется на serv1):
delete from [serv2].db1.dbo.T1

where not exists
(
select *
from [serv3].db2.dbo.T2 OT2
where OT2.F1 = [serv2].db1.dbo.T1.F1
and OT2.F2 = [serv2].db1.dbo.T1.F2
)


При выполнении получаю ошибку:
Server: Msg 117, Level 15, State 2, Line 8
The number name '[serv2].db1.dbo.T1' contains more than the maximum number of prefixes. The maximum is 3.


Вроде как синтаксис запроса правильный, но MS SQL просто не позволяет это сделать.

Как-то это можно "обойти"?

(Cам уже придумал сравнивать не по двум полям, а сначала значения ПК собирать в string и сравнивать этот string через IN, но может есть более правильное решение...)

Спасибо.
18 сен 03, 11:10    [343919]     Ответить | Цитировать Сообщить модератору
 Re: Error 117  [new]
Glory
Member

Откуда:
Сообщений: 104760
delete OT1

from [serv2].db1.dbo.T1 OT1
left outer join [serv3].db2.dbo.T2 OT2 on OT2.F1 = OT1.T1.F1 and OT2.F2 = OT2.T1.F2
where OT2.F1 IS NULL
18 сен 03, 11:25    [343941]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить