我发现sys.sp_identitycolumnforreplication没有在我的耳鼻喉科工作。 SQL 2008R2或SQL 2012实例(下一次将在2016年测试)。这个小片段为我工作。如果您认为合适,请设置@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 2015-01-31 15:52:23
谢谢 - 这会删除我的本地数据库中的“NOT FOR REPLICATION”,但不适用于Azure数据库。任何想法如何? – Ian 2017-09-12 08:21:34