5

Mam bazę danych zawierającą wiele tabel z kolumnami tożsamości ustawionymi na [NIE DLA REPLIKACJI]. w SQL Server 2008 R2 Czy istnieje sposób, w jaki można usunąć to ograniczenie ze wszystkich tabel z Management Studio lub dowolnego kwerendy dzięki.Usuń [NIE DLA REPLIKACJI] ze wszystkich kolumn tożsamości w tabelach bazy danych

Create Table mytbl (
[EmpId] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, 

Próbowałem tego, ale usuwa jeden po drugim.

ALTER TABLE dbo.tblAttendance ALTER COLUMN Id 
     DROP NOT FOR REPLICATION; 

Odpowiedz

9

Firma Microsoft udostępnia systemową procedurę składowania, która włącza i wyłącza ustawienie NIE DLA REPLIKACJI. Procedura składowana to sys.sp_identitycolumnforreplikacji. Możemy korzystać z tego systemu procedura przechowywana wraz z sp_msforeachtable usunąć nie dla ustawienia replikacji ze wszystkich tabelach:

EXEC sp_msforeachtable @command1 = ' 
declare @int int 
set @int =object_id("?") 
EXEC sys.sp_identitycolumnforreplication @int, 0' 
+0

Dzięki. W moim przypadku powyższe nie rozwiązało problemu, to polecenie usunie replikację z tabel bazy danych, jeśli replikowana baza danych została skopiowana i dołączona. Rozwiązałem problem, przechodząc w Management Studio> Replikacja> Local Publikacje węzeł i odznacz replikację z mojej bazy danych. – Zeeshanef

+0

Dzięki - usuwa "NIE DLA REPLIKACJI" na moim lokalnym db, ale nie działa w bazie danych Azure. Masz pomysł? – Ian

1

stwierdziliśmy, że sys.sp_identitycolumnforreplication nie działa w moim Ent. Instancje SQL 2008R2 lub SQL 2012 (test w następnym roku 2016). Ten mały fragment pracował dla mnie. Ustaw @debug, jak chcesz, albo go uruchom, albo uruchom kopiuj i wklej.

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 
+0

działa to dla wszystkich wersji serwera SQL i powinno być najlepszą odpowiedzią. Dzięki za scenariusz Abelian – kuklei

Powiązane problemy