tôi thấy sys.sp_identitycolumnforreplication mà không làm việc trong Ent của tôi. SQL 2008R2 hoặc SQL 2012 trường hợp (wil thử nghiệm trong năm 2016 tiếp theo). Đoạn mã nhỏ này làm việc cho tôi. Đặt @debug như bạn thấy phù hợp, để chạy nó hoặc sao chép-dán-chạy.
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
Cảm ơn. Trong trường hợp của tôi ở trên đã không giải quyết vấn đề, lệnh này sẽ loại bỏ nhân rộng từ các bảng cơ sở dữ liệu nếu cơ sở dữ liệu nhân rộng được sao chép và đính kèm. Tôi giải quyết vấn đề của mình bằng cách vào nút Management Studio> Replication> Local Publications và bỏ chọn bản sao từ cơ sở dữ liệu của tôi. – Zeeshanef
Cảm ơn - điều này sẽ xóa 'NOT FOR REPLICATION' trên db cục bộ của tôi, nhưng không hoạt động trên Azure db. Có ý tưởng nào không? – Ian