How to Insert Values into an Identity Column in SQL ServerBy Bill Graziano on 6 August 2007 | Tags: Identity , INSERT Identity columns are commonly used as primary keys in database tables. These columns automatically assign a value for each new row inserted. But what if you want to insert your own value into the column? It's actually very easy to do. First we'll need a table to work with. My examples will use this table: use tempdb GO IF OBJECT_ID('IdentityTable') IS NOT NULL DROP TABLE IdentityTable GO CREATE TABLE IdentityTable ( TheIdentity INT NOT NULL IDENTITY(1,1) PRIMARY KEY, TheValue NVARCHAR(20) NOT NULL ) GO Simply trying to INSERT a value into the identity column generates an error: INSERT IdentityTable(TheIdentity, TheValue) VALUES (1, 'First Row') GO Msg 544, Level 16, State 1, Line 3 Cannot insert explicit value for identity column in table 'IdentityTable' when IDENTITY_INSERT is set to OFF. The trick is to enable IDENTITY_INSERT for the table. That looks like this: SET IDENTITY_INSERT IdentityTable ON INSERT IdentityTable(TheIdentity, TheValue) VALUES (3, 'First Row') SET IDENTITY_INSERT IdentityTable OFF Here are some key points about IDENTITY_INSERT
If you insert a value greater than the current identity seed SQL Server uses the value to reset the identity seed. For example: SET IDENTITY_INSERT IdentityTable ON INSERT IdentityTable(TheIdentity, TheValue) VALUES (10, 'Row Ten') SET IDENTITY_INSERT IdentityTable OFF INSERT IdentityTable(TheValue) VALUES ('Should be 11') SELECT * FROM IdentityTable GO (1 row(s) affected) (1 row(s) affected) TheIdentity TheValue ----------- -------------------- 10 Row Ten 11 Should be 11 (2 row(s) affected) We have another article on understanding identity columns that covers resetting an identity seed and determining what value was inserted. You can also see a list of all our articles that cover identity columns.
|
- Advertisement - |