Существует предопределенная переменная $(DatabaseName)
для имени целевой базы данных. Вам не нужно создавать свои собственные; и даже если вы это сделаете, вам придется установить одинаковое значение для них обоих.
Не уверен насчет целевого сервера. В большинстве случаев сценарии SQL генерируются при условии, что соединение с правильным сервером уже установлено. Конечно, вы можете изменить текущий сервер, используя что-то вроде :connect $(TargetServerName)
, но я думаю, что это приведет только к путанице (и я не уверен, что это будет работать на самом деле).
Единственное исключение, о котором я могу думать, это то, что вы не можете использовать переменные SQLCMD для параметризации логических / физических имен файлов базы данных - они должны быть жестко закодированы.
Все остальные переменные, если они объявлены в свойствах проекта, должны быть доступны везде. Ниже приведен фрагмент поста, развернутого в одном из моих проектов:
use [master];
go
print 'Switching database ownership to sa...';
GO
alter authorization on database::[$(DatabaseName)] to [sa];
go
use [$(DatabaseName)];
go
print 'Creating database master key...';
go
-- Create database master key
create master key encryption by password = '$(DMK_Key)';
go
print 'Running database setup...';
go
exec dbo.init_database;
go
Возможно, однако, что вы пытаетесь сослаться на другую базу данных, расположенную на другом сервере. Если это так, вам нужно следовать другому подходу, а именно: создать проект для этой удаленной базы данных и добавить его DACPAC в список ссылок на проекты, используя меню Add database reference...
. Там вы сможете указать переменные как для (связанного) сервера, так и для имени базы данных.