sql server replication:
I've notice that when I disable replication the rowguide column remains on each table. Is there an easy way to remove it?
here is something. It will destroy all active publications and subscriptions, make sure you drop them before running this. exec sp_configure N'allow updates', 1 go reconfigure with override go DECLARE @name varchar(129) DECLARE @username varchar(129) DECLARE @insname varchar(129) DECLARE @delname varchar(129) DECLARE @updname varchar(129) set @insname='' set @updname='' set @delname='' DECLARE list_triggers CURSOR FOR select distinct replace(artid,'-',''), sysusers.name from sysmergearticles,sysobjects, sysusers where sysmergearticles.objid=sysobjects.id and sysusers.uid=sysobjects.uid OPEN list_triggers FETCH NEXT FROM list_triggers INTO @name, @username WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'dropping trigger ins_' +@name select @insname='drop trigger ' +@username+'.ins_'+@name exec (@insname) PRINT 'dropping trigger upd_' +@name select @updname='drop trigger ' +@username+'.upd_'+@name exec (@delname) PRINT 'dropping trigger del_' +@name select @delname='drop trigger ' +@username+'.del_'+@name exec (@updname) FETCH NEXT FROM list_triggers INTO @name, @username END CLOSE list_triggers DEALLOCATE list_triggers go if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[syspublications]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) begin DECLARE @name varchar(129) DECLARE list_pubs CURSOR FOR SELECT name FROM syspublications OPEN list_pubs FETCH NEXT FROM list_pubs INTO @name WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'dropping publication ' +@name EXEC sp_dropsubscription @publication=@name, @article='all', @subscriber ='all' EXEC sp_droppublication @name FETCH NEXT FROM list_pubs INTO @name END CLOSE list_pubs DEALLOCATE list_pubs end GO DECLARE @name varchar(129) DECLARE list_replicated_tables CURSOR FOR SELECT name FROM sysobjects WHERE replinfo <>0 UNION SELECT name FROM sysmergearticles OPEN list_replicated_tables FETCH NEXT FROM list_replicated_tables INTO @name WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'unmarking replicated table ' +@name --select @name='drop Table ' + @name EXEC sp_msunmarkreplinfo @name FETCH NEXT FROM list_replicated_tables INTO @name END CLOSE list_replicated_tables DEALLOCATE list_replicated_tables GO UPDATE syscolumns set colstat = colstat & ~4096 WHERE colstat &4096 <>0 GO UPDATE sysobjects set replinfo=0 GO DECLARE @name nvarchar(129) DECLARE list_views CURSOR FOR SELECT name FROM sysobjects WHERE type='V' and (name like 'syncobj_%' or name like 'ctsv_%' or name like 'tsvw_%' or name like 'ms_bi%') OPEN list_views FETCH NEXT FROM list_views INTO @name WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'dropping View ' +@name select @name='drop View ' + @name EXEC sp_executesql @name FETCH NEXT FROM list_views INTO @name END CLOSE list_views DEALLOCATE list_views GO DECLARE @name nvarchar(129) DECLARE list_procs CURSOR FOR SELECT name FROM sysobjects WHERE type='p' and (name like 'sp_ins_%' or name like 'sp_MSdel_%' or name like 'sp_MSins_%'or name like 'sp_MSupd_%' or name like 'sp_sel_%' or name like 'sp_upd_%') OPEN list_procs FETCH NEXT FROM list_procs INTO @name WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'dropping procs ' +@name select @name='drop procedure ' + @name EXEC sp_executesql @name FETCH NEXT FROM list_procs INTO @name END CLOSE list_procs DEALLOCATE list_procs GO DECLARE @name nvarchar(129) DECLARE list_conflict_tables CURSOR FOR SELECT name From sysobjects WHERE type='u' and name like '_onflict%' OPEN list_conflict_tables FETCH NEXT FROM list_conflict_tables INTO @name WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'dropping conflict_tables ' +@name select @name='drop Table ' + @name EXEC sp_executesql @name FETCH NEXT FROM list_conflict_tables INTO @name END CLOSE list_conflict_tables DEALLOCATE list_conflict_tables GO UPDATE syscolumns set colstat=2 WHERE name='rowguid' GO Declare @name nvarchar(200), @constraint nvarchar(200) DECLARE list_rowguid_constraints CURSOR FOR select sysusers.name+'.'+object_name(sysobjects.parent_obj), sysobjects.name from sysobjects, syscolumns,sysusers where sysobjects.type ='d' and syscolumns.id=sysobjects.parent_obj and sysusers.uid=sysobjects.uid and syscolumns.name='rowguid' OPEN list_rowguid_constraints FETCH NEXT FROM list_rowguid_constraints INTO @name, @constraint WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'dropping rowguid constraints ' +@name select @name='ALTER TABLE ' + rtrim(@name) + ' DROP CONSTRAINT ' +@constraint print @name EXEC sp_executesql @name FETCH NEXT FROM list_rowguid_constraints INTO @name, @constraint END CLOSE list_rowguid_constraints DEALLOCATE list_rowguid_constraints GO Declare @name nvarchar(129), @constraint nvarchar(129) DECLARE list_rowguid_indexes CURSOR FOR select sysusers.name+'.'+object_name(sysindexes.id), sysindexes.name from sysindexes, sysobjects,sysusers where sysindexes.name like 'index%' and sysobjects.id=sysindexes.id and sysusers.uid=sysobjects.uid OPEN list_rowguid_indexes FETCH NEXT FROM list_rowguid_indexes INTO @name, @constraint WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'dropping rowguid indexes ' +@name select @name='drop index ' + rtrim(@name ) + '.' +@constraint EXEC sp_executesql @name FETCH NEXT FROM list_rowguid_indexes INTO @name, @constraint END CLOSE list_rowguid_indexes DEALLOCATE list_rowguid_indexes GO Declare @name nvarchar(129), @constraint nvarchar(129) DECLARE list_ms_bidi_tables CURSOR FOR select sysusers.name+'.'+sysobjects.name from sysobjects,sysusers where sysobjects.name like 'ms_bi%' and sysusers.uid=sysobjects.uid and sysobjects.type='u' OPEN list_ms_bidi_tables FETCH NEXT FROM list_ms_bidi_tables INTO @name WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'dropping ms_bidi ' +@name select @name='drop table ' + rtrim(@name ) EXEC sp_executesql @name FETCH NEXT FROM list_ms_bidi_tables INTO @name END CLOSE list_ms_bidi_tables DEALLOCATE list_ms_bidi_tables GO Declare @name nvarchar(129) DECLARE list_rowguid_columns CURSOR FOR select sysusers.name+'.'+object_name(syscolumns.id) from syscolumns, sysobjects,sysusers where syscolumns.name like 'rowguid' and object_Name(sysobjects.id) not like 'msmerge%' and sysobjects.id=syscolumns.id and sysusers.uid=sysobjects.uid and sysobjects.type='u' order by 1 OPEN list_rowguid_columns FETCH NEXT FROM list_rowguid_columns INTO @name WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'dropping rowguid columns ' +@name select @name='Alter Table ' + rtrim(@name ) + ' drop column rowguid' print @name EXEC sp_executesql @name FETCH NEXT FROM list_rowguid_columns INTO @name END CLOSE list_rowguid_columns DEALLOCATE list_rowguid_columns go Declare @name nvarchar(129) DECLARE list_views CURSOR FOR select name From sysobjects where type ='v' and status =-1073741824 and name
Robert, you'll need to do this manually. This is by design as your T-SQL code may refer to the column, either directly or indirectly, so until the dependency is removed, the column has to remain. Regards, Paul Ibison
You will have to do a Alter table drop column, You can create a script to make this easier. thanks gopal
Very impressive! - like sp_removedbreplication but a bit more comprehensive. Regards, Paul
Don't see what you're looking for? Try a search.
|