Установите для параметра SQLCMD значение LinkedServer - PullRequest
0 голосов
/ 09 июля 2020

У меня есть проект VisualStudio SQL, в котором мне нужно установить параметр SQLCMD на значение связанного сервера.

Допустим, в проекте есть следующий запрос:

select * from tableName

Мне нужно изменить это на:

select * from [$(linkedServer)].tableName

, где connectedServer = serverName.dbName.dbo, это переводится как:

select * from [serverName.dbName.dbo].tableName

, что приводит к ошибке:

Недействительное имя объекта 'serverName.dbName.dbo.tableName'.

Однако следующий запрос выполняется успешно: select * from serverName.dbName.dbo.tableName.

Есть ли способ удалить скобки или другая работа для этого? Скобки необходимы, поскольку значение передается как параметр SQLCMD.

1 Ответ

0 голосов
/ 09 июля 2020

Причина отказа [serverName.dbName.dbo].tableName заключается в том, что SQL будет рассматривать все, что находится между [ и ], как единый идентификатор. Таким образом, он ищет объект с именем tableName в схеме с именем serverName.dbName.dbo.

Когда вы заполняете переменную sqlcmd, вставьте в нее квадратные скобки, чтобы получить допустимое имя из 4 частей: [serverName].[dbName].[dbo].tableName

Редактировать для случаев автоматического развертывания / intellisense Visual Studio:

Если вы выполняете автоматическую замену c развертывания с помощью сценария, который генерирует VS, вы Вы можете создавать отдельные переменные для связанного сервера и базы данных, или вы можете сохранить одну переменную и «обмануть» систему, используя идентификаторы в кавычках. Задайте для переменной значение serverName”.”dbName"."dbo (примечание - нет начальной цитаты, кавычки по обе стороны от периода), а в ваших скриптах используйте "$(linkedServer)"

...