【发布时间】:2009-03-31 07:33:59
【问题描述】:
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 /manifest:"..\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 是原始数据库的名称(即我们在开发期间部署的数据库,并且在数据库项目的项目属性中设置)。这是部署失败的地方,要么是因为目标机器上的确切路径可能不同,要么在我的机器上因为该数据库已经存在。
这些值似乎只是硬编码在生成的脚本中。
【问题讨论】:
标签: visual-studio visual-studio-2008 database-project