【问题标题】:SQL INSERT INTO returning autoincrement fieldSQL INSERT INTO 返回自动增量字段
【发布时间】:2010-12-31 00:02:59
【问题描述】:

我是一名长期接触 SQL 的桌面应用程序 C++ 程序员。我需要插入带有自动增量字段的表中,并让该 sql 语句返回自动增量字段的新值。

类似的东西:

INSERT INTO Entrys ('Name','Description')
VALUES ('abc','xyz')
SELECT Entrys.EntryID WHERE EntryID=[THE ONE JUST INSERTED!]

对不起,我是菜鸟。

【问题讨论】:

  • 您使用的是什么数据库? SQL Server、MySQL 等?

标签: sql auto-increment


【解决方案1】:

正如@marc_s 对 SQL Server 所说,在 PostgreSQL 中,您可以通过以下方式获得相同的行为:

INSERT INTO Entrys ('Name','Description')
VALUES ('abc','xyz')
RETURNING EntryID;

当您插入多个元组并且想要为每一行生成所有 ID 时,返回也非常有用。

【讨论】:

    【解决方案2】:

    在 SQL Server 中,您还可以在 INSERT 语句中使用 OUTPUT 子句:

    INSERT INTO Entrys('Name', 'Description') 
    OUTPUT Inserted.EntryID
    VALUES ('abc','xyz') 
    

    这将输出新创建的 IDENTITY 字段值。

    【讨论】:

    • 如果指定了多个 VALUES 元组,返回的 ID 是否保证与值元组的顺序相同?
    【解决方案3】:

    选择 scope_identity

    insert into table values ('string value');select scope_identity()
    

    详情here

    【讨论】:

    【解决方案4】:

    在 MySQL 中你可以使用LAST_INSERT_ID()

    【讨论】:

      【解决方案5】:

      假设您使用的是 SQL Server,您可以使用 scope_identity 返回“插入同一范围内标识列的最后一个标识值。范围是一个模块:存储过程、触发器、函数或批处理。因此,如果两个语句在同一个存储过程、函数或批处理中,则它们在同一范围内。"

      INSERT INTO Entrys ('Name','Description') VALUES ('abc','xyz');
      SELECT SCOPE_IDENTITY() 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-19
        • 2016-10-08
        • 2016-02-03
        • 2011-10-19
        • 2023-04-06
        • 2011-12-09
        • 1970-01-01
        • 2015-01-12
        相关资源
        最近更新 更多