Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
CODE PROJECT For Those Who Code
  • Home
  • Articles
  • FAQ
Community
  1. Home
  2. Database & SysAdmin
  3. Database
  4. Row ID after INSERT to database

Row ID after INSERT to database

Scheduled Pinned Locked Moved Database
questiondatabasejsontutorial
17 Posts 5 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Abyss
    wrote on last edited by
    #1

    Hi, Can anybody tell me how can I determine the inserted row ID (primary key)? I inserted a new record to the database table but I don't know how to retrive what value was assigned to the primary key (ID). The ID is defined as automatic integer (Access database). I insert the new record using the SQLExecDirect API method. Thanks, Abyss

    _ 1 Reply Last reply
    0
    • A Abyss

      Hi, Can anybody tell me how can I determine the inserted row ID (primary key)? I inserted a new record to the database table but I don't know how to retrive what value was assigned to the primary key (ID). The ID is defined as automatic integer (Access database). I insert the new record using the SQLExecDirect API method. Thanks, Abyss

      _ Offline
      _ Offline
      _J_
      wrote on last edited by
      #2

      Variable @@IDENTITY sets to automatic integer after inserting e.g INSERT INTO TableName VALUES blabla,blabla, ..., ... DECLARE @myID int SELECT @myID = @@IDENTITY .... From russia with love ....

      A J 2 Replies Last reply
      0
      • _ _J_

        Variable @@IDENTITY sets to automatic integer after inserting e.g INSERT INTO TableName VALUES blabla,blabla, ..., ... DECLARE @myID int SELECT @myID = @@IDENTITY .... From russia with love ....

        A Offline
        A Offline
        Abyss
        wrote on last edited by
        #3

        I'll try it.:omg: Many thanks, Abyss

        1 Reply Last reply
        0
        • _ _J_

          Variable @@IDENTITY sets to automatic integer after inserting e.g INSERT INTO TableName VALUES blabla,blabla, ..., ... DECLARE @myID int SELECT @myID = @@IDENTITY .... From russia with love ....

          J Offline
          J Offline
          Jeff Martin
          wrote on last edited by
          #4

          You should really use SCOPE_IDENTITY() to be safe. @@IDENTITY returns the last Identity value no matter what the scope. For example, You have 2 tables, table1 and table2. table1 has a trigger that when a record is inserted, it inserts a record in table2. INSERT INTO table1 VALUES ... --the record you inserted into table1 --created the identity of i.e. 1001 --and it fired the insert trigger --which inserted identity value of --i.e. 2002 into table2. DECLARE @myID int SELECT @myID = @@IDENTITY @myID will be equal to 2002 (the value from table2) because @@IDENTITY ignores scope if you use... SELECT @myID = SCOPE_IDENTITY() @myID would be equal to 1001 because the trigger is outside the scope of this query/stored proc/whatever. Jeff Martin My Blog

          _ A 2 Replies Last reply
          0
          • J Jeff Martin

            You should really use SCOPE_IDENTITY() to be safe. @@IDENTITY returns the last Identity value no matter what the scope. For example, You have 2 tables, table1 and table2. table1 has a trigger that when a record is inserted, it inserts a record in table2. INSERT INTO table1 VALUES ... --the record you inserted into table1 --created the identity of i.e. 1001 --and it fired the insert trigger --which inserted identity value of --i.e. 2002 into table2. DECLARE @myID int SELECT @myID = @@IDENTITY @myID will be equal to 2002 (the value from table2) because @@IDENTITY ignores scope if you use... SELECT @myID = SCOPE_IDENTITY() @myID would be equal to 1001 because the trigger is outside the scope of this query/stored proc/whatever. Jeff Martin My Blog

            _ Offline
            _ Offline
            _J_
            wrote on last edited by
            #5

            u absolutly right. my answer was not accurate .... From russia with love ....

            1 Reply Last reply
            0
            • J Jeff Martin

              You should really use SCOPE_IDENTITY() to be safe. @@IDENTITY returns the last Identity value no matter what the scope. For example, You have 2 tables, table1 and table2. table1 has a trigger that when a record is inserted, it inserts a record in table2. INSERT INTO table1 VALUES ... --the record you inserted into table1 --created the identity of i.e. 1001 --and it fired the insert trigger --which inserted identity value of --i.e. 2002 into table2. DECLARE @myID int SELECT @myID = @@IDENTITY @myID will be equal to 2002 (the value from table2) because @@IDENTITY ignores scope if you use... SELECT @myID = SCOPE_IDENTITY() @myID would be equal to 1001 because the trigger is outside the scope of this query/stored proc/whatever. Jeff Martin My Blog

              A Offline
              A Offline
              Abyss
              wrote on last edited by
              #6

              Hi, Many thanks for help. I'm a C++ programer and the suggested methods for some reason fail. I try to get the inserted row's ID (primary key) which was inserted to a table. I tried the following API calls immediately after insert. I use the same m_hStmn for the insert and the select query. This call is successfull however when I query the returned value using the SQLFetch and SQLGetData the returned SQLINTEGER is always zero!? SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT @@IDENTITY AS 'Ident'"), SQL_NTS) I tried to use the more save SCOPE_IDENTITY() function, however these API calls fail. The driver returns (for Access table) undefined function. SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT SCOPE_IDENTITY()"), SQL_NTS) SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT SCOPE_IDENTITY() As [Ident]"), SQL_NTS) In this case I got from the driver one parameter missing error code: SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT SCOPE_IDENTITY"), SQL_NTS) Can anybody explain how can I correctly get the inserted row's ID? Why the above calls fail :((? Thanks, Abyss

              H J 2 Replies Last reply
              0
              • A Abyss

                Hi, Many thanks for help. I'm a C++ programer and the suggested methods for some reason fail. I try to get the inserted row's ID (primary key) which was inserted to a table. I tried the following API calls immediately after insert. I use the same m_hStmn for the insert and the select query. This call is successfull however when I query the returned value using the SQLFetch and SQLGetData the returned SQLINTEGER is always zero!? SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT @@IDENTITY AS 'Ident'"), SQL_NTS) I tried to use the more save SCOPE_IDENTITY() function, however these API calls fail. The driver returns (for Access table) undefined function. SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT SCOPE_IDENTITY()"), SQL_NTS) SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT SCOPE_IDENTITY() As [Ident]"), SQL_NTS) In this case I got from the driver one parameter missing error code: SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT SCOPE_IDENTITY"), SQL_NTS) Can anybody explain how can I correctly get the inserted row's ID? Why the above calls fail :((? Thanks, Abyss

                H Offline
                H Offline
                Huseyin Altindag
                wrote on last edited by
                #7

                Hi I think I've got something it can help you on www.codeproject.com/cs/database/DBManipulationADONET.asp Huseyin Altindag

                A 1 Reply Last reply
                0
                • H Huseyin Altindag

                  Hi I think I've got something it can help you on www.codeproject.com/cs/database/DBManipulationADONET.asp Huseyin Altindag

                  A Offline
                  A Offline
                  Abyss
                  wrote on last edited by
                  #8

                  Well, it is a great idea to use "SELECT MAX(ID) from TableXXX". I suppose that if some record is removed from the table then the given gap is not filled by the new records - the ID is not reused. Always new ID is generated which is greater than the rest. Right? Thanks, Abyss

                  H J 2 Replies Last reply
                  0
                  • A Abyss

                    Well, it is a great idea to use "SELECT MAX(ID) from TableXXX". I suppose that if some record is removed from the table then the given gap is not filled by the new records - the ID is not reused. Always new ID is generated which is greater than the rest. Right? Thanks, Abyss

                    H Offline
                    H Offline
                    Huseyin Altindag
                    wrote on last edited by
                    #9

                    Hi Yes but remember always the new ID generated is greater than the last one you insert. I'll send you(maybe today) a complete application(C#) with SQLServer solution how to do it Huseyin

                    A 1 Reply Last reply
                    0
                    • H Huseyin Altindag

                      Hi Yes but remember always the new ID generated is greater than the last one you insert. I'll send you(maybe today) a complete application(C#) with SQLServer solution how to do it Huseyin

                      A Offline
                      A Offline
                      Abyss
                      wrote on last edited by
                      #10

                      Thanks in advance. Have you any idea why the original solution fail with "SELECT SCOPE_IDENTITY()" and "SELECT @@IDENTITY AS 'Ident'"? It is on the MSDN - how to obtain the ID of the inserted record. Is it an Access related problem? Anyway your solution is great I think that it will work in all cases. Abyss

                      M 1 Reply Last reply
                      0
                      • A Abyss

                        Thanks in advance. Have you any idea why the original solution fail with "SELECT SCOPE_IDENTITY()" and "SELECT @@IDENTITY AS 'Ident'"? It is on the MSDN - how to obtain the ID of the inserted record. Is it an Access related problem? Anyway your solution is great I think that it will work in all cases. Abyss

                        M Offline
                        M Offline
                        Mike Dimmick
                        wrote on last edited by
                        #11

                        Those features are part of Microsoft SQL Server, not Access/Jet. Stability. What an interesting concept. -- Chris Maunder

                        1 Reply Last reply
                        0
                        • A Abyss

                          Hi, Many thanks for help. I'm a C++ programer and the suggested methods for some reason fail. I try to get the inserted row's ID (primary key) which was inserted to a table. I tried the following API calls immediately after insert. I use the same m_hStmn for the insert and the select query. This call is successfull however when I query the returned value using the SQLFetch and SQLGetData the returned SQLINTEGER is always zero!? SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT @@IDENTITY AS 'Ident'"), SQL_NTS) I tried to use the more save SCOPE_IDENTITY() function, however these API calls fail. The driver returns (for Access table) undefined function. SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT SCOPE_IDENTITY()"), SQL_NTS) SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT SCOPE_IDENTITY() As [Ident]"), SQL_NTS) In this case I got from the driver one parameter missing error code: SQLExecDirect(m_hStmn, (SQLTCHAR*)_T("SELECT SCOPE_IDENTITY"), SQL_NTS) Can anybody explain how can I correctly get the inserted row's ID? Why the above calls fail :((? Thanks, Abyss

                          J Offline
                          J Offline
                          Jeff Martin
                          wrote on last edited by
                          #12

                          If you are calling this in a separate query from the insert, I know SCOPE_IDENTITY() won't work. I'm not sure about @@IDENTITY. I write my stored procs that do the insert where they get the scope_identity() and return it. On the code side, I just get the return from teh stored proc. Jeff Martin My Blog

                          A 1 Reply Last reply
                          0
                          • A Abyss

                            Well, it is a great idea to use "SELECT MAX(ID) from TableXXX". I suppose that if some record is removed from the table then the given gap is not filled by the new records - the ID is not reused. Always new ID is generated which is greater than the rest. Right? Thanks, Abyss

                            J Offline
                            J Offline
                            Jeff Martin
                            wrote on last edited by
                            #13

                            No, it is not a great idea. This only works if it is a single user database AND if the ID has not been reset AND SQL Server decides not to fill in gaps. Do not use select max(ID)... Jeff Martin My Blog

                            A 1 Reply Last reply
                            0
                            • J Jeff Martin

                              No, it is not a great idea. This only works if it is a single user database AND if the ID has not been reset AND SQL Server decides not to fill in gaps. Do not use select max(ID)... Jeff Martin My Blog

                              A Offline
                              A Offline
                              Abyss
                              wrote on last edited by
                              #14

                              I'm using an Access (MDB) database - via Access/Jet ODBC driver. I suppose that it is a single user database - maybe it is possible to access the database table from different applications at the same time... Will such database fill in gaps (reuse IDs) and when resets the server the ID? Mark told (see the thread) that "SELECT SCOPE_IDENTITY()" are part of SQL server not Access/Jet. Any other idea? I really appreciate your help :) Thanks, Abyss

                              J 1 Reply Last reply
                              0
                              • J Jeff Martin

                                If you are calling this in a separate query from the insert, I know SCOPE_IDENTITY() won't work. I'm not sure about @@IDENTITY. I write my stored procs that do the insert where they get the scope_identity() and return it. On the code side, I just get the return from teh stored proc. Jeff Martin My Blog

                                A Offline
                                A Offline
                                Abyss
                                wrote on last edited by
                                #15

                                Uhh, it is out of my knowledge (I'm rather a novice). How does such stored procedure looks like? Something like this? INSERT INTO TableXXX (A, B) VALUES (3, 5); SELECT SCOPE_IDENTITY(); in one call. Is it possible at all? Thanks, Abyss

                                J 1 Reply Last reply
                                0
                                • A Abyss

                                  I'm using an Access (MDB) database - via Access/Jet ODBC driver. I suppose that it is a single user database - maybe it is possible to access the database table from different applications at the same time... Will such database fill in gaps (reuse IDs) and when resets the server the ID? Mark told (see the thread) that "SELECT SCOPE_IDENTITY()" are part of SQL server not Access/Jet. Any other idea? I really appreciate your help :) Thanks, Abyss

                                  J Offline
                                  J Offline
                                  Jeff Martin
                                  wrote on last edited by
                                  #16

                                  Sorry, no. I don't use Access. Jeff Martin My Blog

                                  1 Reply Last reply
                                  0
                                  • A Abyss

                                    Uhh, it is out of my knowledge (I'm rather a novice). How does such stored procedure looks like? Something like this? INSERT INTO TableXXX (A, B) VALUES (3, 5); SELECT SCOPE_IDENTITY(); in one call. Is it possible at all? Thanks, Abyss

                                    J Offline
                                    J Offline
                                    Jeff Martin
                                    wrote on last edited by
                                    #17

                                    Basically, yes. It is basically a predefined collection of SQL statements stored on the database. But with Access, you can't use them. Jeff Martin My Blog

                                    1 Reply Last reply
                                    0
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular
                                    • World
                                    • Users
                                    • Groups