Имя объекта ‘DBSourceServer.SourceDWHTemp.dbo.SourceTable1’ содержит больше, чем максимальное количество префиксов. Максимальное значение-2

#sql #sql-server

Вопрос:

У нас есть DBServer1 и DBServer2, и мы хотим загрузить данные с сервера DBSourceServer на сервер DBTargetServer в хранимой процедуре SQL Server. SourceDB и SourceDWHTemp находятся в сервере DBServer1. База данных TargetDB находится в DBServer2. Мы применяем методы ETL в сценарии хранимой процедуры SourceDB, а промежуточные таблицы хранятся в SourceDWHTemp. Окончательные данные будут загружены в таблицы TargetDWHDB. Мы столкнулись с проблемами при запуске сценария.

     ---- We are running this script in [TargetDB]  database and DBTargetServer machine
Use [TargetDWHDB]    
select * from [DBSourceServer].[SourceDWHTemp].[dbo].[SourceTable1]      ----- It is successfully executing
DROP TABLE [DBSourceServer].[SourceDWHTemp].[dbo].[SourceTable1]    ----- 
 

Это вызывает следующее сообщение об ошибке

сообщение об ошибке:

Msg 117, Уровень 15, Состояние 1, Строка 15 Имя объекта ‘DBSourceServer.SourceDWHTemp.dbo.SourceTable1’ содержит больше, чем максимальное количество префиксов. Максимум 2. Время завершения: 2021-06-02T18:21:31.6669423 08:00

Как решить эту проблему. Заранее спасибо.

Комментарии:

1. Вы не можете удалить таблицу на связанном сервере (по крайней мере, не используя этот синтаксис).

2. Даже я не могу усечь это: УСЕЧЬ ТАБЛИЦУ [DBSourceServer]. [SourceDWHTemp].[dbo]. [SourceTable1] — — — — — Это выдает следующее сообщение об ошибке Msg 2702, Уровень 16, Состояние 2, Строка 15 База данных «SourceDWHTemp» не существует.

Ответ №1:

Попробуйте использовать нижеприведенный вариант выполнения.

 EXECUTE ( 'DROP TABLE .[SourceDWHTemp].[dbo].[SourceTable1] ' ) AT [DBSourceServer];
 

Подробнее читайте по этому вопросу