“声明型数据库发布”在IDE内操作起来是非常方便的。但是在做安装包给用户的时候,或者在DailyBuild服务器上不可能也不应该安装Visual Studio。还好MS提供了auto deploy的命令行方法。这个命令叫做vsdbcmd 。
这是一个vsdbcmd的运行命令行的模板
Cd <PROJECT_HOME>\sql\debug\
vsdbcmd /ManifestFile:PROJECT_NAME.deploymanifest /a:Deploy /cs:"Data Source=DBSERVER;Persist Security Info=True;User ID=DB USER;Password=DB PASSWORD;Pooling=False" /p:GenerateDropsIfNotInProject=True /p:BlockIncrementalDeploymentIfDataLoss=False /p:TargetDatabase=DATABASE /p:IgnorePermissions=True /p:GenerateDeployStateChecks=False /dd:+
Vsdbcmd 命令解释
非常复杂的vsdbcmd命令行。简单做一个解释:
/ManifestFile:表明后面跟着一个发布Manifest(清单)文件,里面涉及到诸如dbschema,Pre deploy File,Post deploy File之类的文件的所在位置和名称——这些文件都是Database project 在构建后生成的文件,在sql\debug目录下。用于发布的信息都在这个Manifest文件内做统一的登记。
/cs:表明跟着的信息就是连接字符串,指向要升级的数据库的连接信息。
/p: 指名后面是参数和它的值。
/p:GenerateDropsIfNotInProject=True 如果Database project内没有的对象,是否删除数据库内的对象。
/p:BlockIncrementalDeploymentIfDataLoss=False 如果会导致数据丢失,是否阻塞掉这个发布。
/p:TargetDatabase=DATABASE 指名目标数据库的名称。
其他的就没有那么重要,可以查询vsdbcmd的联机文档。
我测试了“创建新数据库和升级数据库”两种模式,都通过了。