Редакция базы данных Visual Studio поставляется с инструментом vsdbcmd.exe, который должен позволять кому-либо развертывать файл .dbschema (который создается проектом базы данных при сборке) в базе данных. Для этого сначала создается скрипт, а затем выполняется:
vsdbcmd.exe / a: Развернуть / cs: «Источник данных = (локальный); Интегрированная безопасность = Истина; Пул = Ложь» / dsp: Sql / dd /model:"..\Database.dbschema "/ p: TargetDatabase = TargetDB /manifest:"..\Database.deploymanifest"
Я ожидаю, что он сможет без проблем развернуть скрипт на другом сервере базы данных. Однако полный путь к фактическому файлу .mdf кодируется в сценарии вместе с некоторыми другими ссылками на исходную базу данных. Либо нет возможности управлять этим, либо я не могу его найти.
Кто-нибудь этим пользуется? Как вы развертываете? Должен ли я использовать другой тип проекта базы данных (я помню, когда у меня был выбор между «проектом базы данных» и «проектом сервера», но я не знаю, имеет ли это значение)?
EDIT
Я могу просто переопределить .sqlcmdvars, но это не решает проблему. Это извлечение из сгенерированного файла .sql с помощью команды, подобной приведенной выше:
GO
:setvar DatabaseName "TargetDB"
:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\"
Таким образом, целевая база данных «targettdb» записывается правильно. Но, несколько строк дальше:
CREATE DATABASE [$(DatabaseName)]
ON
PRIMARY(NAME = [Original], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original.mdf', SIZE = 3072 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB)
LOG ON (NAME = [Original_log], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original_log.ldf', SIZE = 1024 KB, MAXSIZE = 2097152 MB, FILEGROWTH = 10 %)
где Original.mdf - это имя исходной базы данных (т. Е. База данных, в которой мы развертываем во время разработки, и это задается в свойствах проекта проекта базы данных). Это - то, где развертывание терпит неудачу, или потому что этот точный путь может отличаться на целевой машине или на моей машине, потому что эта база данных уже существует.
Эти значения кажутся жестко закодированными в сгенерированном скрипте.