从 Sql 服务器数据库项目创建通用 update/install 脚本
Creating a generic update/install script from a Sql Server Database Project
您能否从 VS 2015 中的 Sql 服务器数据库项目创建通用的 部署脚本 ,它不需要针对特定目标数据库进行模式比较/发布?
一些背景:
我们正在使用 Sql Server Database projects
来管理我们的数据库模式。我们主要使用这些项目来生成被推送到我们的开发环境中的 dacpac。它们还用于我们产品的全新安装。最近我们为我们的产品开发了一个附加组件,并为它创建了一个新的数据库项目,引用了我们的核心项目。对于客户需要附加组件的新产品安装,将部署我们的新项目。
我们遇到的问题是我们需要能够生成 "generic" 升级脚本。我们现有的大多数安装都不是通过这些项目生成的,并且都包含许多 "custom" 存储的 procedures/etc 特定于该客户端的安装。我正在寻找一种生成脚本的方法,该脚本可以执行 "If Not Exists/Create + Alter" 而无需指定目标数据库。
我们的插件项目仅包含存储过程和几个表,所有这些对于选择此插件的客户来说都是全新的。我需要避免丢弃不在项目中的项目,同时能够部署我们所有的新 "stuff"。我找到了 Include Composite Objects
的选项,我可以取消选中该选项,以便部署特定于我们的附加组件,但发布仍然需要我指定目标数据库,以便可以执行模式比较并获得脚本特定于该特定数据库的。我几乎尝试了所有选项,但找不到解决方案。
底线: 有没有一种方法可以让我生成一个通用脚本,只要在现有安装上请求加载项,我就可以将其提供给我的部署团队,而无需直接从项目中对每个数据库进行架构比较或发布?
现在我在我们的(非数据库)项目中维护一组单独的 .sql 文件,遵循与数据库项目中的项目匹配的 if not exists/create+alter
范例。这些在构建我们的插件期间被连接起来,这样我们就可以给我们的部署团队一个脚本 运行。事实证明这很麻烦,如果可能的话,我们希望能够为此使用数据库项目。
最佳解决方案是将 dacpac 提供给您的安装人员。他们 运行 SQLPackage(可能通过批处理文件或 PowerShell)将其指向 server/DB 进行更新。然后它将生成脚本或直接更新。听起来他们已经可以访问服务器,因此应该能够执行此操作。 SQLPackage 也应该包含在服务器上,或者只要安装程序可以看到目标数据库,它就可以在本地 运行。这可能有帮助:schottsql.wordpress.com/2012/11/08/ssdt-publishing-your-project
有几个使用 PowerShell 执行此操作的示例,但这取决于您需要控制数据库名称或服务器名称的程度。一个简单的批处理文件,其中 edit/replace Server/DB 名称可能就足够了。我绝对推荐发布配置文件,如果这会影响他们本可以修改的客户数据库,那么设置显示的 "do not drop if not in project" 选项几乎是必不可少的。只要您的客户没有对核心对象进行大规模更改,您就可以开始了。
您能否从 VS 2015 中的 Sql 服务器数据库项目创建通用的 部署脚本 ,它不需要针对特定目标数据库进行模式比较/发布?
一些背景:
我们正在使用 Sql Server Database projects
来管理我们的数据库模式。我们主要使用这些项目来生成被推送到我们的开发环境中的 dacpac。它们还用于我们产品的全新安装。最近我们为我们的产品开发了一个附加组件,并为它创建了一个新的数据库项目,引用了我们的核心项目。对于客户需要附加组件的新产品安装,将部署我们的新项目。
我们遇到的问题是我们需要能够生成 "generic" 升级脚本。我们现有的大多数安装都不是通过这些项目生成的,并且都包含许多 "custom" 存储的 procedures/etc 特定于该客户端的安装。我正在寻找一种生成脚本的方法,该脚本可以执行 "If Not Exists/Create + Alter" 而无需指定目标数据库。
我们的插件项目仅包含存储过程和几个表,所有这些对于选择此插件的客户来说都是全新的。我需要避免丢弃不在项目中的项目,同时能够部署我们所有的新 "stuff"。我找到了 Include Composite Objects
的选项,我可以取消选中该选项,以便部署特定于我们的附加组件,但发布仍然需要我指定目标数据库,以便可以执行模式比较并获得脚本特定于该特定数据库的。我几乎尝试了所有选项,但找不到解决方案。
底线: 有没有一种方法可以让我生成一个通用脚本,只要在现有安装上请求加载项,我就可以将其提供给我的部署团队,而无需直接从项目中对每个数据库进行架构比较或发布?
现在我在我们的(非数据库)项目中维护一组单独的 .sql 文件,遵循与数据库项目中的项目匹配的 if not exists/create+alter
范例。这些在构建我们的插件期间被连接起来,这样我们就可以给我们的部署团队一个脚本 运行。事实证明这很麻烦,如果可能的话,我们希望能够为此使用数据库项目。
最佳解决方案是将 dacpac 提供给您的安装人员。他们 运行 SQLPackage(可能通过批处理文件或 PowerShell)将其指向 server/DB 进行更新。然后它将生成脚本或直接更新。听起来他们已经可以访问服务器,因此应该能够执行此操作。 SQLPackage 也应该包含在服务器上,或者只要安装程序可以看到目标数据库,它就可以在本地 运行。这可能有帮助:schottsql.wordpress.com/2012/11/08/ssdt-publishing-your-project
有几个使用 PowerShell 执行此操作的示例,但这取决于您需要控制数据库名称或服务器名称的程度。一个简单的批处理文件,其中 edit/replace Server/DB 名称可能就足够了。我绝对推荐发布配置文件,如果这会影响他们本可以修改的客户数据库,那么设置显示的 "do not drop if not in project" 选项几乎是必不可少的。只要您的客户没有对核心对象进行大规模更改,您就可以开始了。