如何防止 VS2010 Database Project Deployment 生成 drop 数据库?

Posted

技术标签:

【中文标题】如何防止 VS2010 Database Project Deployment 生成 drop 数据库?【英文标题】:How do you prevent a VS2010 Database Project Deployment from generating a drop database? 【发布时间】:2012-09-06 14:01:25 【问题描述】:

假设您有一个数据库项目,并且您没有在 Database.sqldeployment 设置中选中“始终重新创建数据库”。并且假设您部署到一个已经拥有数据库的服务器,该数据库的名称与您正在部署的数据库相同。

还有哪些情况下数据库部署会生成带有“DROP DATABASE”语句的脚本?

如果您从不希望您的数据库被通过右键单击您的数据库项目并选择“部署”生成的部署脚本删除,您可以采取哪些步骤来防止这种情况发生?

【问题讨论】:

您有机会发布项目和设置文件吗? AFAIK 您提到的选项是唯一会导致 DROP DATABASE 被编写脚本的选项。 很遗憾,不是,因为项目属于客户。另外,我什至无法重现这一点。该项目现在会生成没有 drop 的脚本。我试图弄清楚是什么原因导致它之前生成了带有 drop 的脚本。下面的弗兰克对目标连接有一个很好的想法。即使设置了目标连接,也可能仅在我的项目设置中设置,而不是在我的隔离环境设置中设置。我还认为可能定义了目标连接,但不是 *** 可能会导致它。身份证。 嗯,有道理。是的,孤立的开发与项目设置可能有点令人困惑。很高兴他们在 SSDT 中放弃了这个想法。您还记得部署是交互式完成的,还是构建服务器为您运行的?如果是后者,那么构建日志中可能会捕获一些有用的信息。 Deploy 是在 VS 中手动运行的。我只选择了“生成脚本”。我在 SSMS 中打开了脚本,就在那时我看到了 drop 语句。具有讽刺意味的是,我更喜欢“生成脚本”,因为我觉得它比让 VS 为您生成和运行脚本更安全。但是,如果是没有正确设置目标连接,那么直接从 VS 运行会失败,因为它无法连接,这比假设数据库不存在并为其生成删除要安全得多。 【参考方案1】:

除了没有选中“始终重新创建数据库”之外,您还应该检查数据库项目“属性”页面上的“开发”选项卡。确保您定义了目标连接。当您不定义一个项目时,项目将始终且仅部署为就好像目标数据库不存在一样。此行为是设计使然。有关详细信息,请参阅此link。

我的建议是使用 Windows 身份验证创建连接,这样每个用户都可以访问他们应该访问的扩展。

另外请注意,您必须为每个部署配置(例如调试、发布等)执行此操作

我个人将部署操作设置为只创建一个脚本并手动运行它以确保安全!

【讨论】:

谢谢你,弗兰克。事实证明,我确实为该项目配置定义了一个目标连接,它是一个有效的连接字符串,并且我确实将部署操作设置为仅生成脚本,以便我可以从 SSMS 手动运行。然而脚本中仍然有一个 Drop 语句。您提出了一些很棒的建议,即使在阅读了您提供的很棒的链接之后,我仍然觉得我的部署脚本生成 drop 数据库可能还有其他原因。

以上是关于如何防止 VS2010 Database Project Deployment 生成 drop 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

每次更新服务引用时,如何防止 VS2010 创建新绑定?

在 vs2010 中使用 Database 项目部署和应用发布补丁

使用VS2010的Database 项目模板统一管理数据库对象

Cocos2dx网上下载的源码如何导入到vs2010

VS 2010中测试驱动型开发

使用nmake编译Gdal源代码(Win10+VS2022)