【问题标题】:How to add not null unique column to existing table如何将非空唯一列添加到现有表
【发布时间】:2015-03-19 02:18:05
【问题描述】:

有什么方法可以简单地将非空唯一列添加到现有表中。像 default = 1++ 这样的东西?或者只是添加独特的列? 我尝试添加列,然后放置唯一约束,但 MS SQL 说: CREATE UNIQUE INDEX 语句终止,因为找到对象名称的重复键 (...) 重复键值为 ( )。

有什么方法可以简单地将列添加到具有唯一约束的现有工作表中? MS SQL 真的应该认为 null 是一个值吗?

【问题讨论】:

  • SQL Server 违反了 ANSI 标准,因为在标准唯一约束中它只允许一个 NULL 值(在这方面它认为两个 NULL 相等,而不管 ANSI_NULLS 设置如何)。要获得 ANSI 行为,您需要创建一个过滤的唯一索引,它只要求 所有非 NULL 行都是唯一的。

标签: sql sql-server unique


【解决方案1】:

IDENTITY 就是你所需要的:

ALTER TABLE TestTable
ADD ID INT IDENTITY(1, 1)

【讨论】:

    【解决方案2】:
    1. 使用一些默认值添加非空列。
    2. 将列更新为连续整数(参见 row_number() 函数)
    3. 在新列上添加 UNIQUE 约束或 UNIQUE 索引

    您可以将 IDENTITY 列添加到表中(但从问题中不清楚您是否需要它)。

    【讨论】:

    • 如果我有数千条现有数据记录到我的表中,我如何将其设为序列号或默认值中的任何唯一编号,最初将按照您的建议设置
    • @GauravJoshi,第一步你不会得到序列号,它只是为了能够在表中添加一个非空列。您可以将默认设置为零。在第 2 步中,您将零更新为序号。
    【解决方案3】:

    如果您想要一个自动编号,您可以添加一个身份。

    如果您需要自己填充值,则添加允许空值的列,更新值,检查以确保它们是唯一的并且没有空值,然后添加唯一约束和非空属性。最好在维护窗口期间执行此操作,此时没有其他人会更改该表中的数据。

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多