数据库项目 (SqlPackager) 中的对象创建可以是有条件的吗?
Can object creation in a database project (SqlPackager) be conditional?
我有一个包含数百个对象(表、过程等)的 Microsoft SQL 服务器数据库项目。尽管生成的数据库在两种情况下使用——一些客户得到一个包含所有对象的数据库,但一些客户的数据库只包含对象的一个子集。大约 75%。
有没有办法标记数据库项目中的每个对象,这样我就可以根据某种切换来判断是否应该部署它?
我想到了几个选项:
- 使用pre/post部署脚本。我真的不想这样做,因为它首先破坏了使用数据库项目的很多好处。
- 安装所有对象,并有一个 post-deploy 步骤删除我们在 "subset" 安装中不需要的对象。对我来说似乎很老套。
- 将一个数据库项目分成两个项目:一个包含必需对象,一个包含可选对象。
- 有两个项目,一个是 "all",一个是子集。 75% 的文件将出现在两个项目中。然后我安装相应项目的数据库
我认为#3 和#4 听起来可行,但我仍然希望有一个更简单、更易于维护的解决方案。
看起来正确的方法是创建引用第一个数据库项目的第二个数据库项目。
数据库 A 将拥有所有公共对象,数据库 B 将拥有对数据库 A 的引用(引用 -> 添加数据库引用)。我可以将数据库 A 作为 "reduced" 数据库发送,或者将数据库 B 作为 "full" 数据库发送。
仍在努力,但它似乎是做我想做的事情的最干净和正确的方法。
Microsoft 提供了一个很好的参考资料,专门创建了一个 "composite project"。 https://msdn.microsoft.com/en-us/library/jj684584(v=vs.103).aspx
我有一个包含数百个对象(表、过程等)的 Microsoft SQL 服务器数据库项目。尽管生成的数据库在两种情况下使用——一些客户得到一个包含所有对象的数据库,但一些客户的数据库只包含对象的一个子集。大约 75%。
有没有办法标记数据库项目中的每个对象,这样我就可以根据某种切换来判断是否应该部署它?
我想到了几个选项:
- 使用pre/post部署脚本。我真的不想这样做,因为它首先破坏了使用数据库项目的很多好处。
- 安装所有对象,并有一个 post-deploy 步骤删除我们在 "subset" 安装中不需要的对象。对我来说似乎很老套。
- 将一个数据库项目分成两个项目:一个包含必需对象,一个包含可选对象。
- 有两个项目,一个是 "all",一个是子集。 75% 的文件将出现在两个项目中。然后我安装相应项目的数据库
我认为#3 和#4 听起来可行,但我仍然希望有一个更简单、更易于维护的解决方案。
看起来正确的方法是创建引用第一个数据库项目的第二个数据库项目。
数据库 A 将拥有所有公共对象,数据库 B 将拥有对数据库 A 的引用(引用 -> 添加数据库引用)。我可以将数据库 A 作为 "reduced" 数据库发送,或者将数据库 B 作为 "full" 数据库发送。
仍在努力,但它似乎是做我想做的事情的最干净和正确的方法。
Microsoft 提供了一个很好的参考资料,专门创建了一个 "composite project"。 https://msdn.microsoft.com/en-us/library/jj684584(v=vs.103).aspx