我们已经使用Visual Studio数据库项目一段时间了,它们非常适合部署。我们已经开始将不同环境中的数据库的当前状态捕获为dbschemas或dacpac文件,以便我们可以在其他数据库项目中引用它们,因此我们可以在没有生产访问权限的情况下查看生产模式的状态。
我经常想从源代码控制中获取dbschema或dacpac,并在我的本地sql server上创建该架构,但由于用户存在于一个环境而不是本地,因此几乎总会出现错误。如果我忽略用户对象类型,如果其他任何东西引用用户(如模式),我仍然会收到错误。
我已经看到了创建服务器项目来处理这种情况的建议,但我不想为此创建任何自定义,因为我的任务是为我们的开发人员创建一个通用工具。我想能够采取任何dbschema或dacpac并以“尽力而为”的尝试导入它。
我知道这在大多数情况下会很危险,但在我的本地数据库中,我几乎不关心是否存在数据丢失或其他严重错误。我只想要一种快速的方法来获取本地实例上的dbschema中的有效对象。
答案 0 :(得分:0)
我知道您正在处理的确切问题。在VS2010中,当您使用dbschema文件时,除了创建服务器项目之外,我没有任何办法可以做到这一点(正如您所说)。但是,您可以进行架构比较,并选择不比较用户/登录,我相信。
我一直在我的最新项目中使用2012 SSDT并且没有意识到这个错误消失了,直到我读到你的问题。导入现有数据库时,似乎未导入用户。因此,当我发布项目时,它没有部署任何用户。但有趣的是,如果您进行模式比较,您可以选择比较用户并进行部署。但是,如果您通过项目发布(我假设使用SqlProject.exe发布),即使您检查目标中项目中不存在的Drop Objects,也不会触及用户。
然后我的建议是升级到最新版本的数据库项目(2010和2012年可用),不要在项目中包含用户并使用SqlPackage.exe进行发布。
希望这有帮助, 标记