If you try to insert in to a table with an ID column, you could get this error “Cannot insert explicit value for identity column in table ‘<<table>>’ when IDENTITY_INSERT is set to OFF.” This is not the end of the world and is actually pretty easy to get around.
Why Are You Getting This Error?
The reason you’re getting this error is because you are trying to tell SQL Server what the ID value for a row in the table should be. If you have an identity column on your table, SQL Server will want to generate that ID value for you automatically. The error is essentially saying, “Hey, I’m supposed to generate the ID for you… you aren’t supposed to tell me what it is!”
How Can You Fix This?
There are two easy ways to get around this.
If You Want To Tell SQL Server What The ID Value Should Be
If want to specify what the ID values should be for the records you are inserting, then before you execute the INSERT statement, you need to run a small sql command to turn identity inserts on. Identity inserts allow you to populate the value of an identity column with a specific value.
SET IDENTITY_INSERT Animal ON INSERT INTO Animal (AnimalID, AnimalName) VALUES (1, 'Horse'), (2, 'Pig'), (3, 'Cow') SET IDENTITY_INSERT Animal OFF
NOTE: You can only have identity insert on for one table at a time. To insert in to a second table, you will need to turn the identity insert off on the first table before inserting in to the second table.
If You Want To Allow SQL Server To Generate The ID
If you don’t care about what the ID values are for these records, you should just allow SQL Server to generate the ID values for you. To do this, just specify the columns that are in the table and leave off the identity column.
INSERT INTO Animal (AnimalName) VALUES ('Horse'), ('Pig'), ('Cow')