【问题标题】:Deleting columns in MS SQL Server删除 MS SQL Server 中的列
【发布时间】:2009-04-16 10:34:22
【问题描述】:

如何从现有表中删除列?

【问题讨论】:

  • 实际上,另一个问题是在这个问题 2 年后写的,所以这将是重复的。
  • 虽然另一个问题是在这个问题之后写的,但它获得了更多的观点和投票。必须是一个对谷歌更友好的标题或其他东西。因此,我投票结束了这个问题。

标签: sql-server sql-server-2005


【解决方案1】:

您要查找的命令是:

alter table tblName drop column columnName

其中tblName 是表的名称,columnName 是列的名称,但您可能需要先做一些事情。

  • 如果该列有任何外键引用,您需要先删除它们。
  • 如果有索引使用该列,您需要删除它或将其调整为不使用该列。

请记住,此命令的性能不一定很好。一种选择是等待一段停机时间,您可以确定没有人会访问数据库,重命名当前表,然后使用create tableinsert into ... select from 传输您不想删除的列。

Oracle 的较晚版本之一实际上具有软删除功能,它可以将列标记为未使用,而无需物理删除它。它具有相同的效果,因为您无法再引用它,并且有一个类似于 alter table ... drop unused columns 的命令,该命令旨在在安静的时间内运行,它实际上是在物理上删除它的艰苦工作。

这样做的好处是可以立即“消失”列,而不会在繁忙时间拖累数据库性能。

【讨论】:

    【解决方案2】:

    ALTER TABLE XXX DROP COLUMN YYY;

    【讨论】:

      【解决方案3】:

      这也可以通过 SSMS GUI 完成。

      我喜欢这种方法,因为它会警告您该列是否存在任何关系,并且还可以自动删除这些关系。正如 PaxDiablo 所说,如果存在关系,则必须先将其删除。

      1. 将表格放入设计视图(右键单击表格),如下所示:

      1. 右键单击表格设计视图中的列,然后单击“删除 列”

      此时,如果有任何关系也需要删除,它会询问您是否也想删除这些关系。

      【讨论】:

      • 删除列后,我必须右键单击“设计”画布,然后选择Generate Change Script。然后我运行了删除列的脚本。在运行该脚本之前未删除列。
      • @jeppoo1 OOC 你删除列后点击保存了吗?
      • 我没有,我不知道为什么我什至没有想到...现在我知道我可以用 CTRL+S 保存它!谢谢!
      【解决方案4】:

      对于大型表,这可能会非常缓慢。创建一个新表(旧表的副本但有更改)并插入数据通常会快得多。删除旧表,然后重命名新表。

      【讨论】:

        【解决方案5】:
        ALTER TABLE [Intake].[MER_SF_Opportunity_History] DROP COLUMN [[IntakeIsDeleted]]]
        GO
        

        【讨论】:

          猜你喜欢
          • 2011-03-25
          • 2019-02-15
          • 2021-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-15
          • 2012-12-05
          • 1970-01-01
          相关资源
          最近更新 更多