У нас есть проект базы данных, который объединяет таблицу с другой базой данных.Поскольку другое имя базы данных может измениться, ссылка на другую базу данных указывается с помощью переменной sqlcmd, то есть inner join [$(otherdb)].Table1 ...
, для которой мы настроили параметры развертывания.
Теперь я пытаюсь сделать этот проект развертываемым влокальный экземпляр SQL Server для нас как разработчиков, и я хотел бы, чтобы не пришлось развертывать также базу данных, на которую ссылаются, на той же машине.Итак, я условно ($ (IsLocal) = 'true') настраиваю связанный сервер так, чтобы он указывал на наш сервер dev SQL DB, и только для локальных развертываний я пытаюсь настроить переменную $ (otherdb), чтобы она имела значение: linkedserver.otherdb
, а не просто otherdb
.
Это работает в SQL со связанным сервером и вручную выполняет фактические запросы, но, похоже, не работает для развертываний на основе режима sqlcmd.Оказывается, квадратные скобки выводят по линиям [linkedserver.otherdb].Table1
(а не [linkedserver].[otherdb].Table1
), и если я просто уберу квадратные скобки (linkedserver.otherdb.Table1
), я получу ошибку во время сборки для проекта Database, говорящую о неверном синтаксисе,Таким образом, квадратные скобки должны быть там, но полностью определенное вложенное имя делает его недействительным.
Я также попытался использовать значение переменной sqlcmd linkedserver].[otherdb
, чтобы привести к сгенерированному запросу [связанный сервер]. [otherdb ]. [Table1].Это также работает в SQL, когда я пытаюсь выполнить sqlcmd, но когда Visual Studio генерирует скрипт, он добавляет дополнительные ]
, что приводит к:
:setvar otherdb "linkedserver]].[otherdb"
Если я удаляю лишние ]
, это работает, но нет никакого способа вмешаться в этот сгенерированный вывод в сценарии T-SQL без сценария cmd или PowerShell.(Есть?)
Есть ли другой подход, который я могу использовать?