从 Sql Server 数据库项目创建通用更新/安装脚本

     2023-03-23     80

关键词:

【中文标题】从 Sql Server 数据库项目创建通用更新/安装脚本【英文标题】:Creating a generic update/install script from a Sql Server Database Project 【发布时间】:2016-06-20 13:14:27 【问题描述】:

您能否从 VS 2015 中的 Sql Server Db 项目创建一个通用的部署脚本,不需要针对特定​​目标数据库进行架构比较/发布?

一些背景:

我们正在使用Sql Server Database projects 来管理我们的数据库架构。我们主要使用这些项目来生成 dacpacs,这些 dacpacs 会被推送到我们的开发环境中。它们还用于我们产品的全新安装。最近我们为我们的产品开发了一个附加组件,并为它创建了一个新的数据库项目,引用我们的核心项目。对于客户需要附加组件的新产品安装,将部署我们的新项目。

我们遇到的问题是我们需要能够生成“通用”升级脚本。我们现有的大多数安装都不是通过这些项目生成的,并且都包含许多特定于该客户安装的“自定义”存储过程/等。我正在寻找一种生成脚本的方法,该脚本将执行“如果不存在/创建 + 更改”而不需要指定目标数据库。

我们的插件项目仅包含存储过程和几个表,对于选择此插件的任何客户来说,所有这些都是新的。我需要避免丢弃不在项目中的项目,同时能够部署我们所有的新“东西”。我找到了Include Composite Objects 的选项,我可以取消选中该选项,以便部署特定于我们的插件,但发布仍然需要我指定目标数据库,以便可以执行模式比较并且我得到的脚本是特定于该特定数据库。我几乎尝试了所有选项,但找不到解决方案。

底线:有没有办法让我生成一个通用脚本,只要在现有安装上请求附加组件,我就可以将它提供给我的部署团队,而无需进行架构比较还是直接从项目中为每个数据库发布?

现在我在我们的(非 db)项目中维护一组单独的 .sql 文件,遵循if not exists/create+alter 范式,与 db 项目中的项目匹配。这些在我们的插件构建过程中被连接起来,这样我们就可以给我们的部署团队一个脚本来运行。事实证明这很麻烦,如果可能的话,我们希望能够为此使用数据库项目。

【问题讨论】:

你能把你的“附加”对象放在一个单独的项目中,并引用你的主项目吗?维护一个“干净的”数据库并针对该干净的数据库生成“附加”脚本。它应该只生成 Create 语句。如果您需要 Alters,最好让部署团队运行 SQLPackage 来生成脚本。您可以创建一个批处理文件来很容易地做到这一点。只需给他们更新的 dacpacs,过程是相同的 - 生成脚本,必要时查看,运行。 它已经在一个单独的项目中,并带有您建议的参考。这种方法可以工作,但如果我们需要更新其中一个存储过程(例如错误修复),这种方法将不起作用,这就是我正在寻找改变的原因。我对 SqlPackage 不熟悉,我得看看它。 基本上,您将 dacpacs 交给安装人员。他们运行 SQLPackage(可能通过批处理文件或 PowerShell)将其指向要更新的服务器/数据库。然后它将生成脚本或直接更新。听起来他们已经可以访问服务器,所以应该能够做到这一点。 SQLPackage 也应该包含在服务器上,或者只要安装程序可以看到目标数据库,它就可以在本地运行。这可能会有所帮助:schottsql.wordpress.com/2012/11/08/ssdt-publishing-your-project 所以他们会得到“完整”的 dacpac,但是使用发布配置文件,它只做我想要的(没有复合,删除/忽略设置)和目标数据库会部署我需要的部分吗?至少我是这么读你的文章的。如果是这种情况,请发布此答案。我想出了一个 hacky 解决方法,它涉及一个二级构建配置,其中包括一个自定义预部署脚本(仅在该配置中),该脚本删除我所有的程序等并备份和恢复(通过另一个自定义后部署),但它涉及我维护所有该脚本中的水滴。不是最好的,但有效 完成。请注意那些在对您的数据库所做的更改中获得“创造性”的客户。大多数客户都还不错,但有些客户可能会做出一大堆影响应用程序本身的更改。对于那些客户,您可能需要强制执行“未找到删除对象”。大多数时候,我会避免这样做,因为客户有时会在您的架构之外创建帮助程序/表。 :) 【参考方案1】:

最好的解决方案是将 dacpacs 提供给您的安装人员。他们运行 SQLPackage(可能通过批处理文件或 PowerShell)将其指向要更新的服务器/数据库。然后它将生成脚本或直接更新。听起来他们已经可以访问服务器,所以应该能够做到这一点。 SQLPackage 也应该包含在服务器上,或者只要安装程序可以看到目标数据库,它就可以在本地运行。这可能会有所帮助:schottsql.wordpress.com/2012/11/08/ssdt-publishing-your-project

有几个使用 PowerShell 来执行此操作的示例,但这取决于您需要控制多少数据库名称或服务器名称。编辑/替换服务器/数据库名称的简单批处理文件可能就足够了。我绝对推荐发布配置文件,如果这涉及他们可以修改的客户数据库,那么设置显示的“如果不在项目中就不要删除”选项几乎是必不可少的。只要您的客户没有对核心对象进行大规模更改,您就可以开始了。

【讨论】:

SQL Server 数据库项目 - 创建更改脚本

】SQLServer数据库项目-创建更改脚本【英文标题】:SQLServerdatabaseproject-Createchangescripts【发布时间】:2015-07-0705:52:49【问题描述】:我们通过连接现有数据库开始在VisualStudio2012中使用SQLServer数据库项目。我们正在开发一个与该数... 查看详情

SQL Server Analysis Services,从关系数据库更新 OLAP 维度

】SQLServerAnalysisServices,从关系数据库更新OLAP维度【英文标题】:SQLServerAnalysisServices,updateOLAPdimensionsfromrelationaldatabase【发布时间】:2012-06-0208:01:53【问题描述】:我有与关系数据库相关的OLAP分析服务。当关系数据库中的数据更... 查看详情

基于 SQL server 2008 中的属性从大型数据库创建视图

】基于SQLserver2008中的属性从大型数据库创建视图【英文标题】:CreatingViewsfromalargedatabaseonthebasisofattributesinSQLserver2008【发布时间】:2014-08-1205:54:23【问题描述】:我有一个大型数据库,其中包含不同项目、业务线、地理位置的不... 查看详情

从两个表更新新创建的表 - SQL

...:2018-07-1303:53:45【问题描述】:我是sql新手我正在为我的数据库使用myphpadmin我正在尝试从两个不同的表TableA和Tableb更新名为TableC的新创建的表。我确实合并了列中具有共同值的两个表,并为我的项目创建了一个数据库。但是,... 查看详情

将 sql server express 版本更新到另一个版本

...verExpressEdition(我猜是2014年),并且我有一个项目打算为数据库创建备份。但是我从网上发现,ExpressEdition没有管理文件夹或SQLServer代理 查看详情

从脚本文件夹创建或调整 SQL Server 数据库

】从脚本文件夹创建或调整SQLServer数据库【英文标题】:CreatingoradaptingaSQLServerdatabasefromascriptsfolder【发布时间】:2013-10-0409:13:27【问题描述】:我目前有一个代表数据库的源代码控制目录(即它为表、存储过程等创建脚本)。这... 查看详情

C# MVC5 JavaScript Chart.js 饼图,无需刷新即可从 SQL Server 数据库实时更新

】C#MVC5JavaScriptChart.js饼图,无需刷新即可从SQLServer数据库实时更新【英文标题】:C#MVC5JavaScriptChart.jsPieChartwithRealtimeUpdatingfromSQLServerDatabasewithoutRefreshing【发布时间】:2020-02-2311:33:28【问题描述】:我使用Chart.js创建了一个饼图,... 查看详情

如何在 C# 中以编程方式创建 SQL Server 数据库 - 为每个项目创建新 SQL Server 数据库的项目管理应用程序

】如何在C#中以编程方式创建SQLServer数据库-为每个项目创建新SQLServer数据库的项目管理应用程序【英文标题】:HowtocreateSQLServerdatabaseprogrammaticallyinC#-ProjectmanagementapplicationthatcreatesanewSQLServerdatabaseforeachproject【发布时间】:2021-12-2... 查看详情

从 SQL Server 高效更新 MySQL 表

...2010-10-1207:44:48【问题描述】:我们在数据中心有一个MySQL数据库(大部分是只读的,因此是MyISAM表),它与现场的SQLServer数据库通信。WAN中有一些明显的延迟(超过100毫秒);大约6个月后,SQLServerDBMS将向上移动到数据中心(例... 查看详情

如何从 SQL Server DB 创建 SQL Server Express DB

...间】:2009-09-1713:37:21【问题描述】:我有一个SQLServer2008数据库。我想提取一些表(以及相关的架构、约束、索引等)并创建一个SQLServerExpress数据库。这不是目标的同步,我们踩它。我们只需要在文件系统中执行此操作(而不 查看详情

从 jTable 更新 SQL Server 表

...用户按下保存按钮,则对jTable执行的所有更改都应提交到数据库中。实现此类用户操作的最佳方法是什么?(删除和插入不是一种选择)【问题讨论】 查看详情

SQL Server 2012 从 SQL 查询创建用户

...我有一个系统用户表,每个用户都需要一个系统用来访问数据库的自己的数据库用户(不是我的想法..)。系统有自己的登录。这给我们正在测试的SQLAlwaysOn分布式服务器设置带来了问题,因为用户不会在数据库之间同步。因此... 查看详情

使用 OleDb 从 Access Forms 连接到 SQL Server

】使用OleDb从AccessForms连接到SQLServer【英文标题】:ConnectingtoSQLSeverFromAccessFormsUsingOleDb【发布时间】:2017-03-0715:30:41【问题描述】:我正在开展一个将MicrosoftAccess后端迁移到SQLServer后端的项目,我的客户坚持使用Access创建表单来... 查看详情

从 SQL Server 数据库创建 JSON 结果

】从SQLServer数据库创建JSON结果【英文标题】:CreatingaJSONresultfromSQLserverdatabase【发布时间】:2012-03-1401:19:06【问题描述】:我有一个具有以下布局的SQL服务器Table(idinttitlevarchar(40),startDate(),endDate(),allDaybool,usernamevarchar(40));我从thisbl... 查看详情

创建“部分”窗口函数以更新 SQL Server 中的数据

】创建“部分”窗口函数以更新SQLServer中的数据【英文标题】:Createa\'partial\'windowfunctiontoupdatedatainSQLServer【发布时间】:2020-09-1423:08:54【问题描述】:我有一个表,我想使用窗口函数来填充一些NULL,但我只希望数据根据表中的R... 查看详情

从网站获取数据并更新 SQL Server 2008 R2 表

】从网站获取数据并更新SQLServer2008R2表【英文标题】:GetDatafromaWebsiteandupdateaSQLServer2008R2Table【发布时间】:2014-05-1019:36:38【问题描述】:我想知道是否可以在给定的时间间隔从网站获取数据并更新SQLServer2008R2中的表?相关网站... 查看详情

无法从 R 中的 DF 更新 SQL Server 中的值

...布时间】:2021-04-1418:16:45【问题描述】:想要更新SQLServer数据库中的值,但值没有更新。代码运行没有任何错误。#Dfislikesupp_pivot:DateIDBuyerSupplierRelResAgl-------------------------------- 查看详情

从 Excel 更新 SQL Server 表,然后填充剩余的列数据

...也在命令行中指定的文件)中读取数据,以将记录附加到数据库中的现有表中。 查看详情