I REALLY review several times, that's the reason I am asking; looking for guidance...
I have one table, as the script below. Then, I set IDENTITY_INSERT ON
. Then I try to do an insert select, (I NEED the very same ids)
I keep getting this error:
Msg 544, Level 16, State 1, Line 2
Cannot insert explicit value for identity column in table 'Table1' when IDENTITY_INSERT is set to OFF.
Does anybody knows why? Any set up at DB level can overrule the IDENTITY_INSERT ON
?
I appreciate any advice. Thanks in advance and kind regards.
Script to table:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].Table1
(
[TableId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](256) NOT NULL,
[RowVersion] [timestamp] NOT NULL,
[AddedDate] [datetime2](7) NOT NULL,
[stuff2] [int] NOT NULL,
[ModifiedDate] [datetime2](7) NOT NULL,
[LastModifiedBy] [int] NOT NULL,
CONSTRAINT [Table1_PK]
PRIMARY KEY CLUSTERED ([TableId] ASC)
) ON [PRIMARY]
GO
The insert statement:
SET IDENTITY_INSERT [dbo].Table1 ON;
INSERT INTO [dbo].Table1 ([TableId], [Name], [AddedDate], [stuff2], [ModifiedDate], [LastModifiedBy])
SELECT
[RoleID], [Name], [AddedDate], [stuff2], [ModifiedDate], [LastModifiedBy]
FROM
[dbo].Table2
I had the same error even though I had run the SET IDENTITY_INSERT mytable ON
command on my table. I realized it was because I was closing lines in the query script.
If you are closing each line with ;
, the SET IDENTITY_INSERT mytable ON
command will not hold for the following lines.
i.e.
a query like
SET IDENTITY_INSERT mytable ON;
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole');
Gives the error
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.
But a query like this will work:
SET IDENTITY_INSERT mytable ON
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole')
SET IDENTITY_INSERT mytable OFF;
It seems like the SET IDENTITY_INSERT
command only holds for a transaction, and the ;
will signify the end of a transaction.