I have found a solution though adding:
@identityrangemanagementoption = N'manual'
when I re-add the article using sp_addarticle, means that the automatically created sps used to replicate the data don't try and update the identity column and thus are created succesfully on the subscriber rather than raising the error.
To get this to work I scheduled switching off the 'immediate sync' to very low traffic period
EXEC sp_changepublication
@publication = 'statics',
@property = 'Immediate_sync',
@value = 'false'
GO
I then ran a snapshot which only took a fraction of the time at 6 mins.
I then had to drop the current subscription for that article only
EXEC sp_dropsubscription
@publication = 'statics',
@article = 'dbo.SupplierCorporatePayAccountLink_tbl',
@subscriber = 'SURVIVOR'
and rerun the snapshot. Then i could add the subscription back into the publication
EXEC sp_addsubscription
@publication = 'statics',
@article = 'dbo.SupplierCorporatePayAccountLink_tbl',
@subscriber = 'SURVIVOR',
@destination_db = 'MLT-Replicated',
@reserved='Internal'
but it would not allow this without the fairly obscure setting
@reserved ='Internal'
or I got an error message saying I needed to subscribe to all articles.... replication then automatically sync'd the new table. I'm a happy man as this has been causing me some long nights!
Best Answer
There is no need to add an identity column for no reason.
My guess is someone is issuing a SET IDENTITY_INSERT ON when there is no identity column in this table.
You need to check the code to make sure it is correct.