【问题标题】:SQL SERVER 2008 GET LAST INSERTED VALUESSQL SERVER 2008 获取最后插入的值
【发布时间】:2012-09-25 11:21:27
【问题描述】:

这是我的桌子。

Ticket(id int auto_increment,name varchar(50));

插入此表后,我想将 id 和 name 发送到邮件.. 我怎样才能得到最后插入的值。

帮助解决这个问题...

【问题讨论】:

    标签: sql sql-server-2008 jdbc


    【解决方案1】:

    查看:Scope_identity

    SCOPE_IDENTITY()
    

    我们可以从该表中获得最后插入的记录id的具有Identity属性的表将是这样的

    SELECT SCOPE_IDENTITY()
    

    但这不是一个安全的技术:

    SELECT MAX(Id) FROM Ticket
    

    这也不是一个安全的技术:

    SELECT TOP 1 Id FROM Ticket ORDER BY Id DESC
    

    【讨论】:

    • 您的第二个和第三个建议在并发条件下并不安全。
    • 这会起作用,但是当同时在表中插入多个条目时会出现问题。例如,在您获取记录时,在中间插入了另一条记录,那么您将不会得到正确的结果,所以这是在并发的情况下......希望现在你清楚......:)......@DavidA跨度>
    【解决方案2】:

    您应该使用SCOPE_IDENTITY() 来获取表中最后插入的主键值。我想它应该是ID 值。获得后,使用此 ID 执行 SELECT 即可。

    还有@@IDENTITY,但使用其中一个或另一个可能会导致值不准确。

    查看这些详细文章以获得更多见解、如何使用它们的详细说明、它们为何不同以及一些演示代码:

    【讨论】:

      【解决方案3】:

      对于 2008 R2 Service Pack 1 (Link) 之前的 SQL Server:

      使用 SCOPE_IDENTITY() 和 @@身份

      在这种情况下,OUTPUT 子句是最安全的机制:

      DECLARE @InsertedRows AS TABLE (Id int)
      DECLARE @NewId AS INT
      INSERT INTO HumanResources.Employees
        ( /* column names */)
      OUTPUT Inserted.Id INTO @InsertedRows
        VALUES (/* column values */)
      SELECT @NewId = Id FROM @InsertedRows
      

      【讨论】:

      • 事务中是否需要这样做?
      【解决方案4】:

      在您的表中添加自动增量字段,例如....索引(INT,AUTO INCREEMENT) 然后在插入或完成任何操作之前通过获取 max(index) 来获取最后一条记录

      【讨论】:

      • 请修正语法,让人们理解并尝试您的建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      相关资源
      最近更新 更多