그 sys.sp_identitycolumnforreplication 내 엔트에서 작동하지 않았다 발견했다. SQL 2008 R2 또는 SQL 2012 인스턴스 (다음에 2016 년에 wil 테스트). 이 작은 조각은 나를 위해 일했다. @debug를 적절하게 설정하여 실행하거나 복사하여 붙여 넣기를 실행하십시오.
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
감사합니다. 위의 경우 문제가 해결되지 않았지만 복제 된 데이터베이스가 복사되어 첨부 된 경우이 명령은 데이터베이스 테이블에서 복제를 제거합니다. Management Studio> 복제> 로컬 게시 노드로 이동하여 내 데이터베이스에서 복제를 선택 취소하여 문제를 해결했습니다. – Zeeshanef
감사합니다 - 내 로컬 db에서 NOT FOR REPLICATION을 제거하지만 Azure db에서는 작동하지 않습니다. 어떤 생각? – Ian