Dou*_*oug 3 publish sql-server-data-tools
我在Visual Studio 2013中使用SSDT.
我为开发服务器创建了一些发布前和发布后脚本.预部署脚本从表中清空数据并重新设置所有自动标识字段.部署后脚本使用静态和示例数据填充表.
现在我需要将数据库发布到我们的登台和实时数据库服务器.我为这些服务器创建了新的"publish.xml"配置文件.但显然我不希望运行相同的前后脚本.
如何根据发布配置文件指定不同的脚本,或使脚本知道目标并执行不同的操作.
我最关心的是发布到实时服务器并意外破坏数据.
提前致谢.
道格
你有几个选择:
1 - 在调用@servername或环境特有的内容中包含数据更改,这样您就可以:
if @@servername = 'dev_server'
begin
delete blah
insert blah
end
Run Code Online (Sandbox Code Playgroud)
2 - 你也可以使用sqlcmd变量实现类似的东西,传入一个名为"/ v:DestoryData = true"的变量,然后你可以在你的脚本中引用它.
3 - 不要使用前/后部署脚本,但有自己的运行机制,即使用批处理文件来部署dacpacs并在之前和之后添加对sqlcmd的调用 - 这样做的缺点是在部署时,更改为表导致在预部署之前禁用任何外键并在部署后重新启用.
4 - 编辑dacpacs,前/后部署脚本只是dacpac中的文本文件,它本质上是一个遵循microsoft打包格式的zip文件,并且有一个.net打包api可以让你修改它.
我认为这是关于它,请问是否有任何不清楚:)
ED
我建议对条件脚本执行使用SQLCMD变量。
如果右键单击数据库项目并选择“属性”,则将有一个选项卡“ SQLCMD变量”
输入“ $(ServerName)”作为变量,并输入一些默认值。
然后,您需要在XML编辑器中打开EVERY .publish.xml,以便在PropertyGroup部分之后插入以下代码:
<ItemGroup>
<SqlCmdVariable Include="ServerName">
<Value>[YourVersionOfServer]</Value>
</SqlCmdVariable>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
[YourVersionOfServer]应该等于每个服务器上@@ servername的结果。
最终的.publish.xml可能类似于:
然后,应使用以下命令将条件代码包装在部署之前和之后的文件中:
if @@servername = '$(ServerName)'
begin
... code for specific server
end
Run Code Online (Sandbox Code Playgroud)
因此,您可以保证正确的代码可以到达正确的服务器
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |