问题标签 [sqlpackage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2973 浏览

azure-sql-database - 无法使用 sqlpackage.exe 将 DACPAC 发布到 Azure SQL 数据库

尝试将 DACPAC 应用于 Azure SQL 数据库时,我从 sqlpackage.exe 获得以下信息:

*** 生成部署计划时出错。部署无法继续。Element 或 Annotation 类 SqlDatabaseOptions 不包含 Property 类 CatalogCollat​​ion。

我已经设法将 VS2017 与 SSDT 一起使用来创建一个包,然后使用 SQL Server 对象资源管理器将其部署到另一个数据库,但是当我使用 sqlpackage.exe 时它失败了

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130

Azure SQL 数据库兼容级别设置为 140,所以我不确定 SSDT (v 15.6.0) 是否使用更现代的 sqlpacakage.exe 版本,或者我在哪里可以找到它?我还尝试从 Azure SQL 数据库部署 VSTS 任务运行它并获得相同的结果。

我已经尝试映射在此窗口中找到的命令行开关,但我仍然得到同样的错误。

是否有 SSDT 正在使用的我找不到的 sqlpackage.exe 版本,或者它是我缺少的参数?

作为参考,这是我正在使用的命令:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130>sqlpackage.exe /SourceFile:"generated.dacpac" /Action:Publish /TargetServerName:"xxxxxxx.database .windows.net" /TargetDatabaseName:"xxxxxxx" /TargetUser:"xxxxxx" /TargetPassword:"xxxxxxx" /TargetTimeout:120

0 投票
6 回答
6302 浏览

sql-server - “sqlpackage.exe”不被识别为内部或外部命令错误

我用的是 maven,Microsoft SQL server management studio 17.SQL server 版本是 14.0.1000.169。当我构建我的项目时,它会出现以下错误并且构建失败

'sqlpackage.exe' 不是内部或外部命令、
可运行程序或批处理文件。
[错误] 执行过程中出现以下错误:
[错误] 'sqlpackage.exe' 不是内部或外部命令,
[错误] 可运行程序或批处理文件。

这是我的系统环境路径变量。 在此处输入图像描述

我找不到问题所在

0 投票
0 回答
302 浏览

powershell - SqlPackage.exe - 将 Azure Db 导出到 Blob 存储

您可以使用 sqlpackage.exe 触发导出数据库到 BLOB 存储吗?

令人惊讶的是,我找不到任何关于这样做的参考。"sqlpackage /a:export" 的参数没有任何指定 blob 存储的参数,只有 File|Memory。

现在我们正在使用 Powershell AzureRm 组件,我们必须在其中发出请求,然后循环获取状态。这适用于导出正常,但发现状态检查请求不稳定,因此它会定期中断脚本的整体进度。

sqlpackage.exe 调用将是一个阻塞调用,它将消除对额外错误处理逻辑的需要。

感谢您的任何见解

0 投票
3 回答
1161 浏览

visual-studio-2015 - 如何让 SSDT Publish 不生成 REVOKE CONNECT 脚本

我们已经开始使用 SSDT 来管理我们的脚本部署。最初我们使用 Schema Compare 并取消选中我们不想部署的部分。我们现在需要使用仅包含在发布功能中的 Pre 和 Post-Deploy 脚本,并且我们也在尝试清理我们排除的部分。

在 Publish 中添加了 2 个未在 Schema Compare 中的差异,即使设置尽可能接近,我似乎也无法弄清楚。

第一个是 Publish 脚本想要删除 dacpac 中不存在的表的统计信息,即使DropStatisticsNotInSource设置为 false。我能够根据SSDT/SqlPackage drop statistics中的 DeploymentFilterContributor 答案解决此问题。

第二个继续难倒我。大多数应用程序安全性是通过授予角色和各种系统帐户成为成员,具体取决于环境,但是也有用户不在开发数据库中的角色(通​​常是管理员,但也有具有各种权限的实用程序)。我们在不同的环境中有不同的用户。我的长期目标是只让用户担任角色,但我们还没有实现。与此同时,我们需要排除用户被丢弃。我从设置Exclude Users,开始ExcludeLoginsExcludeRoleMembership这是我们在 Schema Compare 中使用的,效果很好。然而,在 Publish 脚本中,我们得到了REVOKE CONNECT脚本(但不是DROP LOGINor DROP USER)。

我已经阅读了使用 SqlPackage.exe 发布 DACPAC 时防止删除用户在 SqlPackage.exe 部署的 dacpac 中创建用户导致登录失败 SqlException(这似乎是一个类似的脚本结果,具有不同的目标,也没有答案)。我尝试将AgileSqlClub.DeploymentFilterContributorIgnoreType(Login), IgnoreType(User), IgnoreType(RoleMembership), 以及IgnoreType(Permissions),一起使用IgnoreSecurity。前3个没有效果。最后 2 个(我还尝试了等效的 SSDT 配置选项)还删除GRANT了我想针对 db 角色包含的脚本。

我觉得我应该能够做到这一点,而无需创建自定义DeploymentContributor并且无需在部署后为所有这些用户编写脚本。我怎样才能摆脱这些REVOKE CONNECT电话?

此外,如果有人知道 Visual Studio 是否实际上在其路径中调用 SqlPackage.exe 或者正在使用库,我将不胜感激这些信息......我似乎无法让我的机器上的 5 个 SqlPackage.exe 中的任何一个工作使用 VS 使用的内置 .dacpac 和 .publish.xml 文件。

我包括完整的发布配置文件以供参考:

VS2015 Update 3 和 SSDT 14.0.61712.050(我认为是最新的)。

0 投票
1 回答
662 浏览

sql-server - VSTS - SQL Server 数据库部署 - DoNotDropObjectTypes 不是有效参数

我正在尝试使用 SQL Server 数据库部署发布任务来部署我的 dacpac,我想使用 /p:DoNotDropObjectTypes=Users;Permissions 参数来防止某些对象被删除,但是我在下面收到以下错误:

我还尝试使用我的发布配置文件 sans 在任务中设置其他参数:

但 SqlPackage 无论如何都试图删除它们:

0 投票
1 回答
722 浏览

sql-server - SSDT 项目发布事务部署

我正在使用 SQLPackage.exe 实用程序和数据库项目的发布配置文件来运行对 SQL Server 数据库的更改。

据我了解,这是部署过程:

预部署脚本


主要部署


部署后脚本


我在发布配置文件高级设置中选中了“包含事务脚本”选项,但是,这似乎仅适用于主部署部分。

我的问题是:如果主部署失败,是否提交了预部署脚本?此外,如果部署后脚本失败,是否正在提交部署前更改和主要部署更改?

是否可以使发布脚本“原子” - 一切作为一个单元成功或失败?

谢谢你。

0 投票
2 回答
1919 浏览

sql-server - 错误:无法解析来自名为“master.dacpac”的源对外部元素的引用

我正在 Windows 机器上使用 sqlpackage 构建数据库 dacpac。该项目包含对master.dacpac

我将 dacpac 移动到 linux 机器(dockermssql-server-linux映像)并恢复数据库。

部署数据库.sh

错误:

没有提供文件供参考 master.dacpac;部署可能会失败。创建包时,原始引用文件位于 C:$(windows 机器路径)\MASTER.DACPAC。Initializing deployment (Failed) 部署计划生成过程中出错。部署无法继续。错误 SQL0:无法解析来自名为“master.dacpac”的源对外部元素的引用,因为没有加载此类源。警告 SQL72025:没有为参考 master.dacpac 提供文件;部署可能会失败。创建包时,原始引用文件位于 C:$(windows 机器路径)\MASTER.DACPAC。

添加引用时出错。部署无法继续。命令“/bin/sh -c sh /deploy-database.sh”返回非零代码:1

我尝试master.dacpac直接添加到项目中并将其复制到 docker 映像中,但发生了同样的错误。

如何在引用 master.dacpac 的 linux 环境中恢复 dapac?

0 投票
1 回答
62 浏览

sql-server - Can object creation in a database project (SqlPackager) be conditional?

I have a Microsoft SQL Server database project with hundreds of objects (tables, procedures, etc). The resulting database is used in two contexts though -- some customers get a database with all the objects, but some customers' databases contain only a subset of the objects. About 75% of them.

Is there a way to mark each object in the database project in such a way I can say whether it should be deployed or not based on a toggle of some sort?

I thought of a few options:

  1. Use pre/post deploy scripts. I really don't want to do this, as it defeats a lot of the benefits of using a database project in the first place.
  2. Install ALL objects, and have a post-deploy step that deletes the objects that we don't want in the "subset" install. Seem hackish to me.
  3. Break the one database project into two project: one with the required objects and one with the optional.
  4. Have two projects, one with "all" and one with the subset. 75% of the files will appear in both projects. Then I install the appropriate project's database

I think #3 and #4 sound doable, but I'm still hoping there is a simpler, more maintainable solution.

0 投票
1 回答
369 浏览

sql-server - 需要在 Visual Studio 数据库项目中明确指定 Microsoft.Data.Tools.Schema.Tasks.Sql 版本

我的情况有点复杂,希望我能正确解释:我有一个 Visual Studio 解决方案,用于构建 WiX 安装程序。除其他外,此安装程序通过 dacpac 部署 SQL DB 模式。此 dacpac 由同一解决方案中的 SQL Server 2014 项目生成。

当前,当它到达需要部署生成的 dacpac 的步骤时,安装会失败。错误如下:

这与此线程中描述的情况类似较新的 SqlPackage.exe 版本对我不起作用。

此外,部署 dacpac 文件的解决方案中的自定义操作项目绑定到 .net 4.5.1。这是一个产品限制,因此使用更新的 .net 版本对我来说也不是解决方案。

不兼容的原因是 dacpac 文件以某种方式针对较新的 Data.Tools.Schema 版本生成。从 dacpac 中的 Origin.xml 中提取:

这会导致 dacpac 文件中的 model.xml 包含部署自定义操作使用的 Microsoft.Data.Tools.Schema.Sql.Deployment 版本 12 无法理解的一些花哨的标签(如错误消息中所示)。

所以我想我唯一的解决方案是明确告诉 Visual Studio 使用 Data.Tools.Schema 的 12 版生成 dacpac 文件,而不是默认选择 14 版,但我在数据库中没有找到任何位置可以指定 Data.Tools.Schema 版本的项目属性。我想 VS 只是获得了它可以在构建机器上找到的最新 DAC 版本并基于它生成 dacpac。

有谁知道如何做到这一点?还是我目前没有看到其他解决方案?

0 投票
1 回答
875 浏览

sql-server - 如何从 Azure DevOps DACPAC 部署中获取漂移报告?

我想在我们的 DACPAC 部署期间获得一份漂移报告(以及部署报告和 TSQL 脚本)。

我们正在使用代理任务“WinRM - SQL Server DB 部署”在 Azure DevOps 中将 DACPAC 部署运行到本地 SQL 服务器。此任务正在使用SQLPacakge.exe,并且可以将“附加参数”传递给该任务。但是如果我添加/Action:DriftReport到参数中,我会得到这个运行时错误:

*** 重复的“操作”参数“漂移报告”。

我的假设是,这/Action:Publish已经由 winRM 任务提供。但是有可能改变吗?

PS:我注意到 Azure DevOps 中的“Azure SQL 数据库部署”任务没有同样的问题。有一个Action用于选择发布、漂移报告等的下拉菜单。