【问题标题】:Primary key doesn't increment主键不增加
【发布时间】:2011-06-02 07:41:48
【问题描述】:

我的表中的主键列有问题。我将 id 列设置为主键(我在 Management Studio 中创建表并在那里设置),身份为 yes,递增为 1,seed 为 1,但是当我尝试插入它时不想插入(仅插入一次并且不会增加 id 的值)。 该怎么办 ?这是来自 Managememt 工作室。

/****** Object:  Table [dbo].[club]    Script Date: 01/01/2011 22:00:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[club](
    [id] [int] NOT NULL,
    [name] [varchar](50) NOT NULL,
    [id_city] [int] NOT NULL,
    [street] [varchar](50) NULL,
    [street_number] [nchar](10) NULL,
    [descritpion] [varchar](500) NULL,
    [logo_path] [varchar](50) NULL,
 CONSTRAINT [PK_club] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

【问题讨论】:

  • 你的意思是它没有增加?在 SSMS 2005 中,如果您只是将结果输入到网格中,则需要按执行按钮来刷新结果。
  • @ OMG Ponies 我从 Management Studio 创建了表,我在工作室中为 id 列检查了身份。
  • “我尝试插入它”是什么意思?您不应该插入 ID 本身,它只会添加到您的记录中。埃亚尔
  • @epeleg 我用 Linq to SQL 插入代码,我没有为 id 输入任何值。之后我直接从 Man 尝试过。螺柱。我没有在 ID 中设置任何值,但它不起作用。

标签: sql sql-server tsql identity


【解决方案1】:

根据提供的CREATE TABLE 语句,很明显没有启用 IDENTITY 属性。它应该类似于:

CREATE TABLE [dbo].[club](
  [id] [int] IDENTITY(1,1) NOT NULL,
  [name] [varchar](50) NOT NULL,
  [id_city] [int] NOT NULL,
  [street] [varchar](50) NULL,
  [street_number] [nchar](10) NULL,
  [descritpion] [varchar](500) NULL,
  [logo_path] [varchar](50) NULL,
  CONSTRAINT [PK_club] PRIMARY KEY CLUSTERED (
    [id] ASC
  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  )

创建表后无法应用 IDENTITY -- 需要删除并创建表。您有两种选择:

  • 删除表,使用我提供的 CREATE TABLE 语句,重新向表中添加数据
  • 创建一个临时表来存储数据,删除现有的club 表,使用IDENTITY 属性重新创建club 表,从临时表中导入行,继续插入其他数据

【讨论】:

  • 请说明如何将 IDENTITY 属性应用于现有列。我认为删除列并添加新列或重新创建整个表是不可避免的
  • @bernd_k - 这是正确的。我不知道为什么它可能只是某个地方的元数据,并且不会影响数据的物理存储。 Some discussion here on the issue
  • @bernd_k - 对于 SQL Server 2008,事实证明这可能的see my answer here
【解决方案2】:

由于自动增量不起作用,您可能没有有价值的数据。

我建议使用以下脚本重新创建您的表:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

DROP TABLE [dbo].[club]
GO

CREATE TABLE [dbo].[club](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](50) NOT NULL,
    [id_city] [int] NOT NULL,
    [street] [varchar](50) NULL,
    [street_number] [nchar](10) NULL,
    [descritpion] [varchar](500) NULL,
    [logo_path] [varchar](50) NULL,
 CONSTRAINT [PK_club] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

【讨论】:

    【解决方案3】:

    主键不会自行递增,因为它是主键。

    如果您想要 SQL Server 中的“自动增量”字段,则必须将该列设置为 identity 列。

    【讨论】:

      猜你喜欢
      • 2014-03-05
      • 2012-07-31
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 2011-04-26
      • 2010-12-09
      • 2011-05-29
      相关资源
      最近更新 更多