在创建它们之前删除表 VS 2012 DB 项目

Posted

技术标签:

【中文标题】在创建它们之前删除表 VS 2012 DB 项目【英文标题】:Drop tables before creating them VS 2012 DB project 【发布时间】:2013-12-31 01:07:27 【问题描述】:

我想在创建数据库项目之前删除包含在数据库项目中的表,因此每次发布项目时,我都会对这些表进行完整构建(默认情况下,它似乎作为增量构建工作)。

我已经看到了删除存在于目标数据库中但不存在于源项目中的表(和其他实体)的选项,而我想要的或多或少是相反的。在创建之前从目标中删除数据库项目中存在的表。

【问题讨论】:

仅供参考,刚刚出现的这个相关的 SO 问题...我认为您可能可以帮助这个人...或者,您可能对将要发布的答案感兴趣关于他的问题:***.com/questions/20555237/… 【参考方案1】:

一个简单的方法是把它放在 SQL 代码中,在 CREATE TABLE 之前:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'zzWorkTable1')
    DROP TABLE dbo.[zzWorkTable1]

或者,如果您在另一个数据库中执行此操作:

IF EXISTS (SELECT * FROM [<db_name>].INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'zzWorkTable1')
    DROP TABLE [<db_name>].dbo.[zzWorkTable1]

如果你想要一些其他的方法......你能告诉我们一些关于这个项目的信息吗,比如创建表格的步骤是什么?

【讨论】:

该项目是 VS 2012 中的一个 DB 项目,它允许您从 SQL Server 资源管理器中对要包含的表进行“拖放”,然后将其发布到某处而不是复制和粘贴查询,您可以实际部署项目。好消息是它部署了所需的东西,但有时我可能需要进行全面部署,而我期待一个我可能会在某处丢失的选项。我的脚本中已经有这些查询,但是如果我希望脚本在 VS 中表现得像一个表,而不仅仅是一个随机脚本,那么这些查询是不兼容的。 @Wallack 有趣...如果您希望脚本表现得像一个表格,您可能希望将该脚本变成VIEW。至于“其他方法”的信息,这将有助于从技术上了解更多——比如,如何创建表——所以我可以建议一个 DROP TABLE 方法与创建在同一个地方......如果这对你有帮助。还有,什么样的项目?这是否发生在控制台应用程序、Web 应用程序、s-s-rS(报告服务)或 SSIS(集成服务)中 - 不太可能,因为我听说 VS 2012 开箱即用并没有处理 SSIS 开发)? 你可能误解了我的意思! VS 2012 可以选择创建一个与数据库具有相同结构的数据库项目(表、视图、触发器、索引......),它会在部署之前尝试编译它以查看其完整性,然后在指定的情况下进行部署地点。这样做的好处是您可以保持数据库更新,因为您可以在 TFS 中拥有项目以及其余数据。问题是每次部署这个项目时,它只会创建不存在或需要重建的表。 @Wallack 是的,这些细节有很大帮助... (1) THIS LINK 的注释——“当你准备部署一个使用一个或多个 SQL Server 数据库的 Web 应用程序项目时,你可以输入指定在部署期间必须运行的数据库脚本的设置。”那么,如何在部署期间运行脚本,如我上面给出的 t-sql 代码......但脚本必须首先运行。 (2) 我只知道 TFS 基础知识,但想知道 TFS 是否可以提供帮助...您可以用 TFS 替换此问题的标签之一,以吸引 TFS 建议吗? 有一种方法可以指定脚本是在部署之后还是之前运行(对于这种情况,会在部署之前删除,然后插入)但问题是这些设置是直接在脚本级别设置的,并且不在个人资料级别。配置文件是您选择部署到的理想情况,我将有两个配置文件,一个用于增量(不会删除),一个用于完整构建(将删除表),所以我不得不一直想知道这一点。

以上是关于在创建它们之前删除表 VS 2012 DB 项目的主要内容,如果未能解决你的问题,请参考以下文章

刚下了 一个vs2012软件 中文版的,想把中文版变成英文版 要如何操作?据说是删一个啥文件?

VS2010数据库项目部署重建每张表

微信误删聊天记录,解密了EnMicroMsg.db,用sqlcipher打开之后,看到是删除后的记录,现怎么恢复误删记录

在 Sqlite 中创建表之前是不是必须删除表?

VS2012不能加载想要打开的项目/解决方案

oracle创建表之前判断表是不是存在,如果存在则删除已有表