问题标签 [dacpac]

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 投票
1 回答
394 浏览

sql-server - SSDT2012 复制csv文件部署服务器

我正在使用 SSDT2012 部署数据库项目。我有要填充的静态数据,但它位于 .csv 文件中。我将它添加到项目中,但看不到复制到服务器临时文件夹或类似文件夹的方法。我尝试添加

谢谢您的帮助!

编辑:我一直在研究部署贡献者,但它仍然不是解决方案。实际上需要让每个人都将贡献者复制到他们的机器上,并且必须维护它并修复它;这不是一个可取的方法。

0 投票
0 回答
685 浏览

visual-studio-2013 - 为什么调用SqlPackage.exe时需要设置默认参数?

我正在使用 SQL Server 部署项目。如果我在项目设置中声明了一个参数,当我使用 SqlPackage.exe 执行 dacpac 时,我总是必须为该变量指定一个值,即使我在项目设置中为该参数指定了一个默认值。为什么是这样?我解压了 dacpac 文件,发现默认值甚至没有与参数声明一起存储。每个人都有这样的经历吗?有没有办法让包使用具有默认值的参数,如果我只想使用默认值,则不需要为 SqlPackage.exe 声明参数?

0 投票
1 回答
277 浏览

powershell - 调用另一个可执行文件并捕获输出

我正在尝试使用 PowerShell 脚本SqlPackage.exe来更新数据库。问题是它产生了一个新的 CMD 窗口,我无法有效地捕获输出。

这是我的脚本:

哪里SqlPackage = "SQLPackage\SqlPackage.exe";

奇怪的是,当我在 Windows 2008 R2 Web 服务器上执行脚本时,输出与 PowerShell 输出是内联的,这正是我想要的。在我的 Windows 7 机器上,它会生成一个新的 CMD 窗口。

如何始终将输出路由到 PowerShell 窗口,或者至少通过管道传输到另一个文件?

编辑

等待过程完成的完整解决方案:

0 投票
2 回答
3097 浏览

sql - 与 SQL Server 项目或项目中本地 mdf 文件持续集成的最佳实践

今天,我维护的项目具有非常混乱的数据库,需要大量重构并在客户端机器上发布。

我知道我可以添加一个仅包含数据库脚本的SQL Server 数据库.dacpac项目,并创建一个允许我自动更改客户端数据库的文件。

另外我知道我可以将一个.mdf文件添加App_Data到文件夹甚至Solution_Data文件夹中,然后将我的数据库放在那里。我想这localDb已经存在允许我在没有 SQL Server 的情况下启动我的解决方案

最后我知道实体框架存在于它自己的迁移中。但我不想使用它,因为我无法通过它的迁移添加和更改索引,并且当我需要描述困难的迁移场景时我没有足够的灵活性。

我的目标:

  1. 自动生成到客户端数据库的迁移脚本。
  2. 使我的解决方案自成一体,任何来到项目的新程序员甚至都不需要在他的机器上安装 SQL Server。
  3. 只需单击 1-2 次即可更新本地(开发)基础。
  4. 能够回到数据库更改的历史记录(我有 TFS 服务器)
  5. 能够在具有最新数据库方案的解决方案中拥有干净的(仅使用字典或查找表)数据库。
  6. 此外,我希望能够自动或非常简单的方式更新我的数据库模型( EF或)。.dbml

所以我要问什么:

  • 如果我想实现我的目标,使用这两种方法的优缺点是什么?

  • 可以是我应该使用这种工具的组合吗?

  • 或者我不知道 MS 的其他现有工具?

  • 有没有办法从这个数据库更新我的DAL模型?

0 投票
1 回答
1092 浏览

sql-server - dacpac 可以用于管理具有大量数据的数据库吗?

我们当前的数据库接近 200MB,但是一旦应用程序上线,我们预计它会增长到很大的容量......可能是 20-30 GB 的数据。

我们计划使用“dacpac”(由数据库项目 - SSDT 生成)部署在生产服务器上。将使用许多表和查找表中的大量初始数据创建数据库。

但是,当我们将使用“dacpac”(由数据库项目 - SSDT 生成)来升级生产服务器上的数据库时,我们担心的是未来的部署。

由于我过去没有使用 dacpac 进行部署的经验,任何人都可以建议我关注以下内容 -

  1. 部署是否取决于数据量?或者,如果它仅取决于架构更改?例如,如果目标数据库是 20-30 GB,那么升级它大概需要多少时间?
  2. 我们如何对数据库模式进行版本控制?
  3. 如果出现任何问题,升级过程是否可以回滚?

最后,它是否比传统的手动编写 sql 脚本升级数据库的方式更好?

0 投票
1 回答
142 浏览

c# - 部分部署 Dacpack

我有一个从 DB 或 DB 项目生成的 dacpac 文件。这个 dacpac 当然包含表、存储过程、视图等。

我想用 dacpac 中的一些对象创建一个新数据库,而不是全部。在我的情况下,我有对象列表和表格。

我想知道要从 dacpac 对象中忽略,或者只使用一组对象创建另一个 dacpac,或者提取目标对象的相应 sql 脚本。

对此有何建议?谢谢

0 投票
2 回答
1962 浏览

sql-server - dacpac - CLR 程序集引用路径问题

以下是我的数据库项目中的确切场景,我正在创建 dacpac 以在目标 SQL 实例上部署数据库:

  • 数据库项目有 CLR 程序集的引用。
  • TFS构建服务器用于构建项目
  • dacpac 在 TFS 构建过程中被创建

– 当我尝试运行 sqlpackage.exe 以在我的环境中部署 dacpac(在 TFS 构建过程中生成)时,我收到一条错误消息 –</p>

*** 没有提供文件供参考 XXXX.XXXX.XXXX.dll;部署可能会失败。创建 C:\Temp\Dacpac_testing\XXX.XXXXX.XXXX.dacpac 时,原始引用文件位于 C:\BUILDS\1\XXXX\XXXX\SRC\XXXXXXXX\ASSEMBLIES\XXXX.XXXX.XXXX.dll

如何创建 dacpac 以引用部署环境中 CLR 程序集的路径(而不是在构建 dacpac 时使用的路径)

对此的任何帮助将不胜感激。

0 投票
2 回答
3073 浏览

sql-server-2014 - 发布管理不会部署到 SQL 2014 数据库

使用 Microsoft 的 Team Foundation Server 2013 v12.0.31101.0 版本管理服务器,我不断收到错误消息(稍后包含)。但是,我可以从本地计算机、构建服务器和目标 SQL Server 成功运行 sqlpackage 命令。

采取的步骤

  • 我从中取出 dll 和 sqlpackage.exeC:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin并将它们复制到我桌面上的文件夹中
  • 在发布管理中,我使用以下命令创建了一个新工具:sqlpackage.exe /Action:Publish /SourceFile:__FileName__ /TargetDatabaseName:__DatabaseName__ /TargetServerName:__ServerName__
  • 然后,我从之前创建的文件夹中添加了 dll 和 SqlPackage.exe
  • 保存并关闭
  • 然后我创建了一个新组件,它基本上只是包装了这个工具(构建放置位置是一个反斜杠,表示 dacpac 位于构建文件夹的根目录)
  • 然后我选择了我创建的工具并填写了所有内容。我更新了我的发布模板以包含和使用该组件

将我创建的文件夹放在任何桌面上,我可以运行以下命令,它运行得非常完美

我从本地 PC、Build Server 和 SQL Server 本身执行此操作,但是当我使用 Release Management 时,我得到了错误。

错误

更新 1:我在来自发布管理的错误电子邮件中注意到目标服务器是我的 Web 服务器而不是 SQL Server,即使 SQL Server 在命令中被正确命名。我检查了 Web 服务器上的日志并发现了错误。我将我的 dll 文件夹复制到桌面并运行脚本,瞧,我能够重新创建错误。我在控制面板中检查了已安装的程序,发现已安装的 Transact-SQL ScriptDom 版本是 2012 版,版本 11.0.2100.60。所以我在这里安装了SSDT。安装失败,因为我没有安装 Visual Studio,但它仍然设法安装了 12.0.2000.8 版本的 Transact-SQL ScriptDom 和相关 dll。当我再次运行脚本时,它成功发布了数据库!但是,当我尝试从 Release Management 构建时,我遇到了一个新错误。

更新 2:所以,我已经确认它此时失败的原因是因为构建服务器使用的帐户没有 SQL Server 的登录帐户。我添加了该帐户,然后在我的目标数据库中授予它 ddladmin 和 securityadmin 权限。这会产生一个新错误,我无法创建新用户,但至少我越来越近了。

最终更新:我还必须授予系统管理员权限,以便该帐户可以创建登录名。这使得 RM 中的部署步骤能够成功。这显然不是我要离开的方式,我将使用发布配置文件或命令标志来防止使用安全对象创建 dacpac 并让它以最低权限运行。

让 RM 部署到 SQL 2014 的问题已经解决。主要问题是在我的发布模板中,我将 DACPAC 组件与我的 Web 服务器构建的其余部分内联。这会导致 DACPAC 命令从 Web 服务器运行,为此我必须在 Web 服务器上安装 SSDT。我不喜欢这样,我可能会重新排列我的发布模板,以便 web 服务器和 sql 服务器是并行的,但嵌套在同一个回滚下。

0 投票
1 回答
636 浏览

sql-server - 为什么我应该使用 dbDacFx 提供程序?

我正在寻找在将 Web 应用程序部署到 IIS 时自动发布 dacpac 的方法。

其中一种方法是通过 Web Deploy 本身,使用 dbDacFx 提供程序。请参阅:http ://www.iis.net/learn/publish/using-web-deploy/dbdacfx-provider-for-incremental-database-publishing

他们为同步两个数据库提供的一些示例如下所示:

我的问题是为什么我不会为此使用 SqlPackage.exe?

据我所知,Web Deploy 并没有带来任何新东西。为什么 dbDacFx 提供程序甚至存在?

我已经考虑过的事情:

  • Web Deploy 的 dbDacFx 运行在应用服务器上,而不是触发部署的机器上
    • 可以通过 wmsvc 委派规则进行非管理员部署(但为什么这些示例使用“sa”而不是集成安全性?)
  • msdeploy.exe 和 SqlPackage.exe 都支持通过 xml 配置进行参数化。
0 投票
2 回答
3264 浏览

sql-server - Dacpac 不得删除多余的列

我一直很高兴地编写一个使用 Sql Server 数据库项目的产品,并且生活一直很好,直到我们发现升级中的问题。

当我们创建表、存储过程和各种其他数据库工件时,一旦部署到客户那里,他们就可以将自己的列添加到我们的 dacpac 创建的表中。

我们正在使用 DacFx 进行部署 (Microsoft.SqlServer.Dac),并且还为坚持由其 DBA 部署的客户提供原始 dacpac。

虽然在使用 SSMS 或类似工具时问题可能仍然存在,但我确信使用“正确”的代码,我们应该能够在通过代码部署时以某种方式防止这种情况。

有没有人遇到过同样的问题并可能找到了解决方案?

更新,添加部署设置的屏幕截图。从图中可以看出,“在目标中放置对象但不在项目中”设置已关闭。

部署选项