【问题标题】:Does Adding Column Delete Data添加列是否删除数据
【发布时间】:2015-01-31 21:45:17
【问题描述】:

我想知道我是否使用以下方法向表中添加一列:

alter table Jobs
add Complete boolean

这会清除当前表中的所有数据吗?我正在使用 SQL Server Management Studio 2012

【问题讨论】:

    标签: sql sql-server alter-table


    【解决方案1】:

    一点也不。这会添加一个值为NULL 的列,但它对表中已有的数据没有直接影响。

    注意:boolean 不是 SQL Server 中的数据类型,因此特定语句将不起作用。您可以改用bittinyintsmallintint。或 char(1) 来存储“T”和“F”。

    第二个注意事项:如果您的表非常大,那么添加一列可能需要一段时间,因为可能需要重写所有数据。尽管值为NULL,但SQL Server 中的每一页都包含一个位,用于所有列中的NULL 值。如果这超出了字节边界,则需要在页面上重新排列数据 - 并且可能需要为数据分配新页面。在任何情况下,都需要修改每个页面以包含 NULL 值。因此,如果可能,建议在空表中添加列。

    【讨论】:

    • 啊,谢谢。是的,我只是快速将这个问题抛到一起,我将使用 nvarhcar(3)
    • 比特是等价的。对于布尔值,1 为真,0 为假。就个人而言,我建议在需要真/假值时使用位域
    • 好吧,我不知道。我会尝试一下。谢谢!
    • 是的,不要使用 nvarchar(3) 来保存布尔值。位是你最好的选择。事实上,如果你有一个 3 个字符的字段,你最好使用 nchar(3) 而不是 nvarchar(3) 因为知道给定字段包含多少个字符的存储块是两个字节,并且可能比您的数据本身更大。此外,nvarchar 每个字符占用两个字节,而 varchar 每个字符占用一个字节。当然,如果您的要求需要 unicode,请使用您需要的任何内容。但一般来说,只要您需要存储布尔值,请查看 BIT 数据类型。
    【解决方案2】:

    不,它不会删除您的数据。它将添加一列,所有现有数据将在该列中分配空值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多