Visual Studio 数据库版本附带一个工具 vsdbcmd.exe,它应该允许某人将 .dbschema 文件(由构建时的数据库项目生成)部署到数据库。它首先构建脚本,然后执行它:
vsdbcmd.exe /a:Deploy /cs:"Data Source=(local);Integrated Security=True;Pooling=False" /dsp:Sql /dd /model:"..\Database.dbschema" /p:TargetDatabase=TargetDB /清单:“..\Database.deploymanifest”
我希望它可以毫无问题地将脚本部署到不同的数据库服务器。但是,实际 .mdf 文件的完整路径已编码在脚本中,以及对原始数据库的其他一些引用。要么没有控制它的选项,要么我找不到它。
有人用这个吗?你如何部署?我是否应该使用不同类型的数据库项目(我记得在“数据库项目”和“服务器项目”之间有选择,但我不知道这是否重要)?
编辑
我可以很好地覆盖 .sqlcmdvars,但这并不能解决问题。这是使用上述命令从生成的 .sql 文件中提取的内容:
GO
:setvar DatabaseName "TargetDB"
:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\"
所以有“targetdb”目标数据库被正确记录。但是,还有几行:
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 是原始数据库的名称(即我们在开发过程中部署的数据库,在数据库项目的项目属性中设置)。这是部署失败的地方,要么是因为目标机器上的确切路径可能不同,要么在我的机器上,因为该数据库已经存在。
这些值似乎只是硬编码在生成的脚本中。