none
SQL语句Insert一条记录的同时,返回该条记录的主键值 RRS feed

  • 问题

  • 表中的主键是自增长类型的且到一定值循环,能否实现在Insert一条记录的同时返回该记录的主键值,而不用Insert后在去Select?谢谢!
    guiwenyang
    2009年12月10日 5:15

答案

  • 如果是2005看看如下的用法:


    DECLARE @MyTableVar TABLE( ScrapReasonID SMALLINT,
                               Name VARCHAR(50),
                               ModifiedDate DATETIME);
     
    INSERT ScrapReason
        OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
            INTO @MyTableVar
     


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/happyflystone/archive/2008/10/05/3017655.aspx


    More: blog.csdn.net/happyflystone
    2009年12月10日 15:01
  • 表中的主键是自增长类型的且到一定值循环,能否实现在Insert一条记录的同时返回该记录的主键值,而不用Insert后在去Select?谢谢!
    guiwenyang

    既然目的是循环, 那么即使多条记录, 也只需要最后一条记录的自增值就行了, 所以在插入后直接查询 SCOPE_IDENTITY() 就行了(@@IDENTITY不准确, 比如你的表上有触发器, 触发器有往另一个自增表写, 那么返回的是另一个表的)

    如果你一定要在插入多条记录的情况下, 得到所有插入记录自增列主键值, 那么, 你可以用 IDENT_INCR 函数取自增列的增长值, 结合   SCOPE_IDENTITY()  和 @@ROWCOUNT 推算一下就好了.

    当然, >=sql 2005 的版本, 用 output 子句是最方便的了
    2009年12月11日 4:32

全部回复

  • insert table(.......) values(......),select @@identity
    2009年12月10日 7:43
  • 我觉得没办法,必须用select。
    不过不应该是@@identity,   用@@SCOPE_IDENTITY

    http://msdn.microsoft.com/zh-cn/library/ms190315.aspx

    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2009年12月10日 13:10
    版主
  • 如果是2005看看如下的用法:


    DECLARE @MyTableVar TABLE( ScrapReasonID SMALLINT,
                               Name VARCHAR(50),
                               ModifiedDate DATETIME);
     
    INSERT ScrapReason
        OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
            INTO @MyTableVar
     


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/happyflystone/archive/2008/10/05/3017655.aspx


    More: blog.csdn.net/happyflystone
    2009年12月10日 15:01
  • 表中的主键是自增长类型的且到一定值循环,能否实现在Insert一条记录的同时返回该记录的主键值,而不用Insert后在去Select?谢谢!
    guiwenyang

    既然目的是循环, 那么即使多条记录, 也只需要最后一条记录的自增值就行了, 所以在插入后直接查询 SCOPE_IDENTITY() 就行了(@@IDENTITY不准确, 比如你的表上有触发器, 触发器有往另一个自增表写, 那么返回的是另一个表的)

    如果你一定要在插入多条记录的情况下, 得到所有插入记录自增列主键值, 那么, 你可以用 IDENT_INCR 函数取自增列的增长值, 结合   SCOPE_IDENTITY()  和 @@ROWCOUNT 推算一下就好了.

    当然, >=sql 2005 的版本, 用 output 子句是最方便的了
    2009年12月11日 4:32