当前位置:  开发笔记 > 编程语言 > 正文

数据库部署(vsdbcmd.exe):DatabaseName和DefaultDataPath被忽略?

如何解决《数据库部署(vsdbcmd.exe):DatabaseName和DefaultDataPath被忽略?》经验,为你挑选了1个好方法。

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是原始数据库的名称(即我们在开发期间部署的数据库,它在数据库项目的项目属性中设置).这是部署失败的地方,因为在目标计算机上或我的计算机上的确切路径可能不同,因为该数据库已存在.

这些值似乎在生成的脚本中是硬编码的.



1> 小智..:

执行数据库架构同步 - >数据库项目时可能会导致此问题.(我的环境是VS2010 Enterprise RTM).

生成生成的ALTER DATABASE语句以镜像数据库,而不考虑任何替换值(它还将包括初始数据库大小等).该问题不会出现在初始数据库导入中.

编辑在...下找到的文件

架构对象\数据库级对象\存储\文件

...并根据需要修复它们以包含正确$(DefaultDataPath)$(DatabaseName).mdf/ $(DefaultLogPath)$(DatabaseName)_log.ldf值 - 或其他 - .(现在在Schema Compare中将它们标记为"Skip":-P)

通过上述"校正",保持外部值将再次起作用,并且是管理这些属性的首选方法.

快乐的编码.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有