The meta data is from an SQL 2012 Server.
I have posted alot more, find the whole list here.
Goto Definition or MetaData
Definition:
sys.sp_MSaddguidindex(nvarchar @publication, nvarchar @source_owner
, nvarchar @source_table)
MetaData:
create procedure sys.sp_MSaddguidindex
@publication sysname,
@source_owner sysname,
@source_table sysname
as
set nocount on
declare @indexname nvarchar(270)
declare @colname nvarchar(270)
declare @retcode int
declare @qualified_name nvarchar(517)
declare @filegroup nvarchar(258)
declare @colid int
declare @columns varbinary(128)
declare @id int
declare @pubid uniqueidentifier
declare @mergepublish int
declare @column_name sysname
-- Security check
exec @retcode = dbo.sp_MSreplcheck_publish
if @@error <> 0 or @retcode <> 0 return (1)
select @mergepublish = 0x4000
select @pubid = pubid from dbo.sysmergepublications
where name=@publication and publisher=publishingservername() and publisher_db=db_name()
select @qualified_name = QUOTENAME(@source_owner) + '.' + QUOTENAME(@source_table)
select @id = object_id(@qualified_name)
select @colid=column_id, @column_name = name from sys.columns where object_id=@id and is_rowguidcol=1
begin tran
save tran sp_MSaddguidindex
exec %%Object(MultiName=@qualified_name).LockMatchID(ID=@id, Exclusive = 1, BindInternal = 0)
-- exec %%Object(MultiName=@qualified_name).LockExclusiveMatchID(ID=@id)
if @@error<>0
begin
rollback tran sp_MSaddguidindex
commit tran
return (1)
end
exec %%ColumnEx(ObjectID=@id,Name=@column_name).SetMergePublished(Value=1)
if @@ERROR<>0
begin
rollback tran sp_MSaddguidindex
commit tran
return (1)
end
commit tran
-- Update the columns bitmaps in all articles at the current publisher that share the same table --
declare artpubs CURSOR LOCAL FAST_FORWARD FOR
select DISTINCT pubid from dbo.sysmergearticles with (rowlock) where objid=@id and pubid
in ( select pubid from dbo.sysmergepublications where UPPER(publisher) = UPPER(publishingservername())
and publisher_db = db_name())
FOR READ ONLY
open artpubs
fetch next from artpubs into @pubid
while (@@fetch_status <> -1)
begin
select @columns=columns from dbo.sysmergearticles with (rowlock) where objid=@id and pubid=@pubid
exec @retcode = sys.sp_MSsetbit @columns OUTPUT, @colid
if @retcode<>0 or @@ERROR<>0
return (1)
update dbo.sysmergearticles with (rowlock) set columns=@columns where objid=@id and pubid = @pubid
if @@ERROR<>0
return (1)
fetch next from artpubs into @pubid
end
close artpubs
deallocate artpubs
select @indexname = 'MSmerge_index_' + convert(nvarchar(36), @id)
select @colname=name from sys.columns where object_id=@id and is_rowguidcol=1
if (@colname is null)
return (1)
-- Alter the source table to add a rowguid column index --
if (not exists (select * from sys.indexes
where object_id = object_id(@qualified_name) and
@colname = index_col(@qualified_name, index_id, 1)
and is_unique = 1 and
index_col(@qualified_name, index_id, 2) is null))
begin
declare @quoted_rgcol nvarchar(290)
set @quoted_rgcol= quotename(@colname)
-- Special case partitioned tables because we can not create a unique index on the rowguid column on such tables without
-- putting it on a specific filegroup.
-- Check if the table is partitioned.
if not exists (select * from (sys.indexes as i INNER JOIN sys.partition_schemes as ps
ON (i.data_space_id = ps.data_space_id))
where (i.object_id = object_id(@qualified_name)) and
(i.index_id IN (0,1))) -- to ensure that we are dealing with tables
begin
exec ('create unique index ' + @indexname + ' on ' + @qualified_name + '(' + @quoted_rgcol + ')')
if @@ERROR <>0 return (1)
end
else
begin
-- Table is partitioned.
-- Find a filegroup that is not a destination for a partitioning scheme.
select top 1 @filegroup = QUOTENAME(fg.name) from sys.filegroups as fg
left outer join sys.destination_data_spaces as ds
on ds.data_space_id = fg.data_space_id
where ds.data_space_id is null
order by fg.name
if @filegroup is null
begin
select top 1 @filegroup = QUOTENAME(fg.name) from sys.destination_data_spaces as ds
join sys.filegroups as fg
on ds.data_space_id = fg.data_space_id
order by ds.data_space_id
end
if @filegroup is null
begin
return (1)
end
exec ('create unique index ' + @indexname + ' on ' + @qualified_name + '(' + @quoted_rgcol + ') on ' + @filegroup)
if @@ERROR <>0 return (1)
end
end
return (0)
No comments:
Post a Comment