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_MSproxiedmetadata(int @tablenick, uniqueidentifier @rowguid
, varbinary @proxied_lineage
, varbinary @proxied_colv
, bit @proxy_logical_record_lineage
, int @compatlevel)
MetaData:
create procedure sys.sp_MSproxiedmetadata
@tablenick int,
@rowguid uniqueidentifier,
@proxied_lineage varbinary(311),
@proxied_colv varbinary(2953),
@proxy_logical_record_lineage bit,
@compatlevel int = 10 -- backward compatibility level, default=Sphinx
as
declare @local_lineage varbinary(311)
declare @local_version int
declare @proxied_version int
declare @incontents tinyint
declare @retcode int
-- Security Checking
-- PAL user access
exec @retcode = sys.sp_MSrepl_PAL_rolecheck @tablenick = @tablenick
if (@retcode <> 0) or (@@error <> 0)
return 1
set @proxied_version = {fn GETMAXVERSION(@proxied_lineage)}
if (@proxy_logical_record_lineage = 0)
select @local_lineage = lineage from dbo.MSmerge_contents
where tablenick = @tablenick and rowguid = @rowguid
else
select @local_lineage = logical_record_lineage from dbo.MSmerge_contents
where tablenick = @tablenick and rowguid = @rowguid
if @local_lineage is not null
set @incontents= 1
else
begin
-- cannot proxy if logical record parent row is no longer in contents.
-- if (@proxy_logical_record_lineage = 1)
-- return (0)
if (@proxy_logical_record_lineage = 0)
select @local_lineage = lineage from dbo.MSmerge_tombstone
where tablenick = @tablenick and rowguid = @rowguid
else
select @local_lineage = logical_record_lineage from dbo.MSmerge_tombstone
where tablenick = @tablenick and rowguid = @rowguid
if @local_lineage is not null
set @incontents= 0
else
return(0)
end
set @local_version= {fn GETMAXVERSION(@local_lineage)}
-- make sure that local lineage was not updated since the publisher proxied its last change
-- if it was updated, we leave it unchanged
if @local_version <= @proxied_version
begin
if @compatlevel < 90
begin
if @proxied_lineage is not null
set @proxied_lineage= {fn LINEAGE_80_TO_90(@proxied_lineage)}
if @proxied_colv is not null and @proxy_logical_record_lineage = 0
set @proxied_colv= {fn COLV_80_TO_90(@proxied_colv)}
end
if @incontents = 1
begin
if (@proxy_logical_record_lineage = 0)
update dbo.MSmerge_contents with (rowlock) set lineage = @proxied_lineage, colv1 = @proxied_colv
where tablenick = @tablenick and rowguid = @rowguid and
-- lineage compare makes sure lineage has not changed since @local_lineage was retrieved
lineage = @local_lineage
else
update dbo.MSmerge_contents with (rowlock) set logical_record_lineage = @proxied_lineage
where tablenick = @tablenick and rowguid = @rowguid and
-- logical_record_lineage compare makes sure lineage has not changed since @local_lineage was retrieved
logical_record_lineage = @local_lineage
end
else
begin
if (@proxy_logical_record_lineage = 0)
update dbo.MSmerge_tombstone with (rowlock) set lineage = @proxied_lineage
where tablenick = @tablenick and rowguid = @rowguid and
-- lineage compare makes sure lineage has not changed since @local_lineage was retrieved
lineage = @local_lineage
else
update dbo.MSmerge_tombstone with (rowlock) set logical_record_lineage = @proxied_lineage
where tablenick = @tablenick and rowguid = @rowguid and
-- logical_record_lineage compare makes sure lineage has not changed since @local_lineage was retrieved
logical_record_lineage = @local_lineage
end
end
return (0)
No comments:
Post a Comment