【问题标题】:How to set Identity Specification YES in 2 columns in a table in SQL Server 2008如何在 SQL Server 2008 的表中的 2 列中设置标识规范是
【发布时间】:2013-07-17 02:14:29
【问题描述】:

如何在 SQL Server 2008 的表中的 2 列中设置身份规范是?

示例:

id int, 
catid int,

对于"@id",我正在使用主键,并且我设置了 Is Identity YES。允许不为空。

对于"@catid",我也想设置身份,

但是当我为 "@catid" 列设置 Identity YES 时,"@id" 列它本身就变成了 Identity No。

我希望@catid 也像@id 一样自己生成 id。

请检查附上的图片。并建议我

【问题讨论】:

  • 你为什么要这样做?如果两者都可能是标识列,它们将始终具有相同的值(除非您以不同方式设置开始/增量,但在这种情况下,总是可以从另一个计算)。
  • 我正在用 asp.net c# 写博客。没问题好的谢谢

标签: c# asp.net sql settings identity


【解决方案1】:

您似乎遇到了一些表格设计问题。为什么要有两个身份列?如 cmets 中所述,这些值将始终相同或可从原始身份规范计算:

create table MyTable (
    Id int identity(1,1) not null primary key,
    CatId as Id, -- computed column
    MyField nvarchar(100) null
)

产量:

Id  CatId   MyField
1   1       A
2   2       B
3   3       C
4   4       D
5   5       E

现在,如果我们想为 CatId 设置一些不同的值:

create table MyTable (
    Id int identity(1,1) not null primary key,
    CatId as Id * 3, -- some different value
    MyField nvarchar(100) null
)

我们会得到:

Id  CatId   MyField
1   3       A
2   6       B
3   9       C
4   12      D
5   15      E

无论哪种方式,拥有多个身份列都是没有意义的。

【讨论】:

    【解决方案2】:

    两列不可能在同一个表中设置标识,但我有办法

    将您的 id 设置为 primary 和 identity,并在对该表进行插入操作后写入触发器,然后使用 id 值更新 catid 列 您将在两列中获得 id,其中一列是主键,另一列是普通列

    【讨论】:

      【解决方案3】:

      不可能有多个标识列。而是将一列作为主键而不自动递增。

      每个表只允许一个标识列。

      利用主键。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-17
        • 2013-04-17
        • 1970-01-01
        • 1970-01-01
        • 2015-02-21
        • 2016-10-31
        • 2011-04-01
        相关资源
        最近更新 更多