Причина отказа [serverName.dbName.dbo].tableName
заключается в том, что SQL будет рассматривать все, что находится между [
и ]
, как единый идентификатор. Таким образом, он ищет объект с именем tableName
в схеме с именем serverName.dbName.dbo
.
Когда вы заполняете переменную sqlcmd, вставьте в нее квадратные скобки, чтобы получить допустимое имя из 4 частей: [serverName].[dbName].[dbo].tableName
Редактировать для случаев автоматического развертывания / intellisense Visual Studio:
Если вы выполняете автоматическую замену c развертывания с помощью сценария, который генерирует VS, вы Вы можете создавать отдельные переменные для связанного сервера и базы данных, или вы можете сохранить одну переменную и «обмануть» систему, используя идентификаторы в кавычках. Задайте для переменной значение serverName”.”dbName"."dbo
(примечание - нет начальной цитаты, кавычки по обе стороны от периода), а в ваших скриптах используйте "$(linkedServer)"