Ich fand, dass sys.sp_identitycolumnforreplication nicht in meinem Ent funktionierte. SQL 2008R2- oder SQL 2012-Instanzen (wird im nächsten Jahr getestet). Dieser kleine Ausschnitt funktionierte für mich. Stellen Sie @debug so ein, wie Sie es für richtig halten, um es auszuführen, oder kopieren-einfügen-ausführen.
set nocount on
declare @loop int = 1, @debug bit = 1, @schema sysname, @table sysname, @column sysname, @status int, @sqlStatement nvarchar(1000)
declare repl_cursor cursor for
SELECT
[schema] = object_schema_name([object_id])
, [table] = object_name([object_id])
, [column] = [name]
, IsIdNotForRepl = COLUMNPROPERTY([object_id], [name], 'IsIdNotForRepl')
, [--script] = 'alter table [' + object_schema_name([object_id]) + '].[' + object_name([object_id]) + '] alter column [' + [name] + '] DROP NOT FOR REPLICATION'
FROM sys.columns
WHERE 1=1
and COLUMNPROPERTY([object_id], [name], 'IsIdNotForRepl') = 1
and object_schema_name([object_id]) <> 'sys'
order by 1,2
open repl_cursor
fetch next from repl_cursor into @schema, @table, @column, @status, @sqlStatement
WHILE @@FETCH_STATUS = 0
BEGIN
print '--loop: ' + cast(@loop as varchar(3)) + '; table: [' + @schema + '].[' + @table + '].[' + @column + ']; status = ' + case when isnull(@status,3) = 3 then 'NULL' else cast(@status as varchar(2)) end
print @sqlStatement + char(10)
if @debug = 0 exec(@sqlStatement)
FETCH NEXT FROM repl_cursor into @schema, @table, @column, @status, @sqlStatement
set @loop +=1
END
close repl_cursor
deallocate repl_cursor
go
Danke. In meinem Fall wurde das Problem durch Obiges nicht gelöst. Dieser Befehl wird die Replikation aus den Datenbanktabellen entfernen, wenn die replizierte Datenbank kopiert und angehängt wurde. Ich löste mein Problem, indem ich im Knoten Management Studio> Replikation> Lokale Publikationen die Replikation aus meiner Datenbank deaktivierte. – Zeeshanef
Danke - das entfernt 'NOT FOR REPLICATION' auf meiner lokalen Datenbank, funktioniert aber nicht auf der Azure Datenbank. Irgendeine Idee wie? – Ian