是否可以使用visual studio Sql Server数据工具数据库项目为不同的发布配置文件部署不同的种子数据集?
我们知道您可以使用部署后脚本部署种子数据。 我们知道您可以使用发布配置文件工具部署到不同的环境。 我们不知道的是如何将不同的种子数据部署到不同的环境中。
我们为什么要这样做?
答案 0 :(得分:8)
有几种方法可以实现这一点,第一种方法是检查后部署脚本中的环境,例如..
if @@servername = 'dev_server'
begin
insert data here
end
稍微更简洁的版本是为每个环境提供不同的脚本文件,并通过:r import sqlcmd脚本导入它们,以便您可以:
然后
if @@servername = 'dev_server'
begin
:r DevServer.sql
end
if @@servername = 'qa_server'
begin
:r QAServer.sql
end
您需要确保.sql文件的路径是正确的,然后使用dacpac复制它们。
您不必使用@@ servername,您可以使用sqlcmd变量并将其传递给每个环境,这些环境再次比硬编码的服务器名称更清晰。
第二种方法是将dacpac用于改变post delpoy脚本以改变你的环境特定的脚本,这是我的首选,并且作为CI构建的一部分效果最好,我的过程是:
我调用脚本PostDeploy.dev.sql,PostDeploy.Qa.sql等,并将Build操作设置为" None"或者它们被添加为"脚本,不在构建"。
要替换部署后的脚本,您只需要使用.net Packaging API,或者在某些示例中查看我的Dir2Dac演示,该演示可以执行此操作以及更多:
https://github.com/GoEddie/Dir2Dac
更具体地说:
https://github.com/GoEddie/Dir2Dac/blob/master/src/Dir2Dac/DacCreator.cs
var part = package.CreatePart(new Uri("/postdeploy.sql", UriKind.Relative), "text/plain");
using (var reader = new StreamReader(_postDeployScript))
{
reader.BaseStream.CopyTo(part.GetStream(FileMode.OpenOrCreate, FileAccess.ReadWrite));
}
答案 1 :(得分:2)
我已经通过编写一个Powershell脚本解决了这个问题,该脚本在发布时由项目文件中的Exec命令自动执行。
它创建一个脚本文件,其中包含项目文件夹中找到的所有脚本(该文件夹的名称与目标环境类似)。
然后,此脚本将包含在部署后脚本中。