【问题标题】:How to insert row into a SQL table with auto-increment primary key如何使用自增主键将行插入到 SQL 表中
【发布时间】:2021-10-04 18:32:53
【问题描述】:

我有一个只包含一列的表 - 一个自动递增的主键。

我需要向该表中插入值以生成新 ID。

这是我的表结构

CREATE TABLE [InvestmentJourneys]
(
    [InvestmentJourneyId] [int] NOT NULL IDENTITY(1, 1)
        CONSTRAINT [PK_InvestmentJourneys] 
            PRIMARY KEY CLUSTERED ([InvestmentJourneyId])
) 

我试过了:

INSERT INTO [InvestmentJourneys] ([InvestmentJourneyId]) 
VALUES (NULL)

但我收到一个错误,因为此列是主键。

如果您有任何关于如何实现这一点的建议,我将不胜感激。

【问题讨论】:

  • 由于该表只有一列是递增的数字,您是否考虑过使用序列代替?

标签: sql sql-server tsql


【解决方案1】:

像这样:

INSERT INTO dbo.InvestmentJourneys
DEFAULT VALUES;

【讨论】:

  • 不知道那个语法。也适用于 PostgreSQL。我的书呆子发现在 MySQL 中它的作用是insert into t () values ();
  • 啊,现在作为一个挑战,让我们看看你是否知道如何在一个语句中生成多个这些。我花了一段时间才弄明白,假设你不能在 2005 或更早的版本上做到这一点。
  • 不确定你不能用上面的方法,@Charlieface。如果您在 SSMS 等 IDE 中,则可以使用 GO {n},但从技术上讲,这不是一条语句,而是同一条语句被执行 n 次。但是,如果您有一个包含单个 IDENTITY 列的表并且您想要生成多行,我建议您的设计有缺陷。
  • 我想我会帮你搞定的 :-) 诀窍是 MERGE 与源是所需行数的计数表,ON 1 = 0 WHEN NOT MATCHED THEN INSERT DEFAULT VALUES,我将它与 @ 结合起来987654327@ 子句将实际值返回给客户端。相当可怕。诚然,我曾经不得不处理在SEQUENCE 出现之前构建的部分数据库,是的,设计很糟糕。
猜你喜欢
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多