【问题标题】:Problem in creating two identity columns in a single table在单个表中创建两个标识列的问题
【发布时间】:2012-11-30 20:37:10
【问题描述】:

我在单个表中创建两个标识列时遇到问题。这是我工作的一部分......他们需要不惜一切代价在一个表中包含两个标识列。有没有办法做到这一点。

请提供一次或稍后在单个表中创建两个标识列的任何语法。

提前致谢, 沙什拉

【问题讨论】:

  • SQL Server 表中不能有两个 IDENTITY 列,无论如何。
  • 嗯?你能更好地解释一下吗?另外,确定您的意思是“身份”还是“相同”。真正值得知道的是他们为什么想要这两列
  • 你的问题没有意义,为什么要标记mysql和sqlserver?
  • @Shashra:其他人的工作是什么?可以换吗?
  • 两个身份列没有意义——它们是一样的。问题中缺少需求数据,在我们了解需求之前,我们无法提供合理的答复。

标签: sql sql-server sql-server-2005


【解决方案1】:

在 SQL Server 中,您可以拥有一个计算列,该列只包含与标识(或任何其他)列相同的值:

CREATE TABLE [dbo].[test](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [idCopy]  AS ([id]),
    [whatever] [nvarchar](max) NOT NULL
)

【讨论】:

  • 但这是没有意义的......您可以使用别名再次选择同一列。这样它将受益于标识列上的索引。
  • @RedFilter - 我没有对它的用处发表任何评论,我只是回答了这个问题。
  • @RedFilter,它可能毫无意义,但它确实回答了 OP 的问题。询问 OP 为什么需要完成这项工作是有意义的。
  • @Jamiec:当您提供答案时,我认为这是暗示这是合理的做法,除非您另有明确说明。
  • @Ramy:它没有回答这个问题,因为它不会创建两个身份。为什么已经被问到了......
【解决方案2】:

您不能在同一个表中有两个相同的列。如果您在表 X 中有两个名为 id 的列,此查询的结果是什么:

select id from X

显然 sql 会遇到这个问题。我认为您能做的最好的事情是使用相似的名称(例如 Identity 或 ID2)进行另一个查询,并将新列的每个字段设置为该表中 ID(原始字段)的值

【讨论】:

    【解决方案3】:

    SQL Server 表中只能有一个标识列:

    "There can only be one IDENTITY column per table" - Why?

    如果您向我们提供更多关于您想要实现的目标(以及序列的预期行为)以及原因的信息,可能会更容易一些。

    例如,您可以添加一个计算的或持久的计算列,以另一个名称公开身份。

    您可以将两个作为外键的列添加到具有单独标识列的两个单独表中,然后在每个外键列上添加唯一约束。

    在我们更多地了解您想要实现的目标之前,很难看出拥有两个身份列会给您带来什么好处。

    【讨论】:

      【解决方案4】:

      人们应该冷静下来。他可能想用不同的种子和不同的增量来增加不同的字段。

      id1: 1
      id2: 1
      
      id1: 1
      id2: 2
      
      id1: 1
      id2: 3
      
      id1: 2
      id2: 1
      

      答案是使用复合键并以某种方式自己设置值。

      可能会根据您的第二个 id 的递增要求使用身份和触发器: http://msdn.microsoft.com/en-us/library/ms189799.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2014-06-29
        • 2019-10-09
        • 2020-10-12
        相关资源
        最近更新 更多