Nur um hinzuzufügen, dass Sie die Replikation nicht löschen und neu erstellen müssen, nur um das Bit "Nicht für Replikation" zu ändern.
Sie können dies mit T-SQL tun, ohne einen Snapshot zu erstellen oder Ihre Replikation zu unterbrechen.
sys.sp_identitycolumnforreplication
1 = nicht zur Replikation
0 = für die Replikation und dies verursacht die Probleme mit Identitätsspalten auf der Teilnehmerseite
So ändern Sie es für alle Tabellen:
EXEC sp_msforeachtable @command1 = '
declare @int int
set @int =object_id("?")
EXEC sys.sp_identitycolumnforreplication @int, 1'
Um es für nur eine Tabelle zu ändern, ermitteln Sie zuerst die object_id der Tabelle und führen Sie sie dann unten aus
EXEC sys.sp_identitycolumnforreplication table_object_id, 1
BEARBEITEN
Unter tsql erhalten Sie eine schöne Ausgabe mit einem Befehl, der überprüft werden kann, bevor er für die gesamte Datenbank ausgeführt wird:
if exists (select 1 from sys.identity_columns where is_not_for_replication = 0)
begin
SELECT QUOTENAME(SCHEMA_NAME(t.schema_id)) as SchemaName,
QUOTENAME(t.name) AS TableName,
c.name AS ColumnName,
c.object_id as ObjectID,
c.is_not_for_replication,
'EXEC sys.sp_identitycolumnforreplication '+cast(c.object_id as varchar(20)) + ', 1 ;' as CommandTORun_SetIdendityNOTForReplication
FROM sys.identity_columns AS c
INNER JOIN sys.tables AS t ON t.[object_id] = c.[object_id]
WHERE c.is_identity = 1
and c.is_not_for_replication = 0
end
else
print 'There are no identity columns that needs NOT FOR REPLICATION set to 1'
Für die Adventureworks-Datenbank: