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是原始数据库的名称(即我们在开发期间部署的数据库,它在数据库项目的项目属性中设置).这是部署失败的地方,因为在目标计算机上或我的计算机上的确切路径可能不同,因为该数据库已存在.
这些值似乎在生成的脚本中是硬编码的.
执行数据库架构同步 - >数据库项目时可能会导致此问题.(我的环境是VS2010 Enterprise RTM).
生成生成的ALTER DATABASE语句以镜像源数据库,而不考虑任何替换值(它还将包括初始数据库大小等).该问题不会出现在初始数据库导入中.
编辑在...下找到的文件
架构对象\数据库级对象\存储\文件
...并根据需要修复它们以包含正确$(DefaultDataPath)$(DatabaseName).mdf
/ $(DefaultLogPath)$(DatabaseName)_log.ldf
值 - 或其他 - .(现在在Schema Compare中将它们标记为"Skip":-P)
通过上述"校正",保持外部值将再次起作用,并且是管理这些属性的首选方法.
快乐的编码.