2

我们使用 Visual Studio 数据库项目已有一段时间了,它们非常适合部署。我们已经开始将不同环境中数据库的当前状态捕获为 dbschema 或 dacpac 文件,以便我们可以在其他数据库项目中引用它们,这样我们就可以在没有生产访问权限的情况下查看生产模式的状态。

通常我想从源代码管理中获取 dbschema 或 dacpac 并在我的本地 sql 服务器上创建该模式,但由于用户存在于一个环境中而不是我的本地环境中,几乎总是会出现错误。如果我忽略用户对象类型,如果其他任何内容引用用户(如模式),我仍然会收到错误。

我已经看到了创建一个服务器项目来处理这种情况的建议,但我不想为此创建任何自定义的东西,因为我的任务是为我们的开发人员创建一个通用工具。我希望能够采用任何 dbschema 或 dacpac 并以“尽力而为”的方式导入它。

我知道这在大多数情况下会很危险,但在我的本地数据库上,我几乎从不关心是否存在数据丢失或其他严重错误。我只想要一种快速的方法来获取本地实例上 dbschema 中的有效对象。

4

1 回答 1

0

我知道你正在处理的确切问题。在 VS2010 中,当您使用 dbschema 文件时,我不相信除了创建服务器项目(如您所说)之外还有其他方法可以做到这一点。但是,您可以进行模式比较并选择不比较用户/登录名,我相信。

我一直在我的最新项目中使用 2012 SSDT,直到我读到你的问题才意识到这个错误消失了。当我导入现有数据库时,似乎没有使用它导入用户。因此,当我发布项目时,它没有部署任何用户。有趣的是,如果您进行模式比较,您可以选择比较用户并部署它们。但是,如果您通过项目发布(我假设使用 SqlProject.exe 发布),则不会触及用户,即使您选中了项目中不存在的目标中的删除对象。

然后我的建议是升级到最新版本的数据库项目(适用于 2010 和 2012),不要在项目中包含用户并使用 SqlPackage.exe 发布。

希望这有帮助,马克

于 2013-01-04T12:29:08.040 回答