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_MSenumgenerations(bigint @genstart, uniqueidentifier @pubid
, bit @return_count_of_generations)
MetaData:
CREATE PROCEDURE sys.sp_MSenumgenerations (@genstart bigint, @pubid uniqueidentifier, @return_count_of_generations bit = 0) as declare @generation_range TABLE (generation bigint NOT NULL, guidsrc uniqueidentifier NOT NULL, art_nick int NULL, genstatus tinyint NOT NULL, pubid uniqueidentifier NULL, nicknames varbinary(1000) NOT NULL, okaytoskip bit NOT NULL, changecount int NOT NULL) declare @retcode smallint ,@rowcount int ,@maxgen bigint -- -- Check to see if current publication has permission -- if (@genstart is null) begin RAISERROR(14043, 16, -1, '@genstart', 'sp_MSenumgenerations') return (1) end if (@pubid is null) begin RAISERROR(14043, 16, -1, '@pubid', 'sp_MSenumgenerations') return (1) end if ({ fn ISPALUSER(@pubid) } <> 1) begin RAISERROR (14126, 11, -1) return (1) end insert into @generation_range (generation, guidsrc, art_nick, genstatus, pubid, nicknames, okaytoskip, changecount) select DISTINCT generation, guidsrc, art_nick, genstatus, pubid, {fn REPLNICKARRAY_90_TO_80(nicknames)}, 0, changecount from dbo.MSmerge_genhistory with (rowlock) where generation >= @genstart and (art_nick = 0 or art_nick is NULL or art_nick in (select nickname from dbo.sysmergearticles where pubid = @pubid)) select @rowcount = @@rowcount if (@return_count_of_generations = 1) select @rowcount -- we want open generations inserted by merge to look like local open generations -- update @generation_range set genstatus = 0 where genstatus = 4 -- optimizations -- 1. skip all rows that are for incomplete generations for articles that have no joins. -- 2. skip all rows for join articles if all the join article rows are incomplete generations. update @generation_range set okaytoskip = 1 where art_nick is not null and art_nick <> 0 and genstatus in (0, 4) and ( ( -- 1. skip all rows that are for incomplete generations for articles that have no joins. not exists (select 1 from dbo.sysmergesubsetfilters where (join_nickname = art_nick or art_nickname = art_nick) and (filter_type & 1) = 1) ) or ( -- 2. skip all rows for join articles if all the rows for join and joined articles (i.e. the articles represented by join_nickname -- and art_nickname in dbo.sysmergesubsetfilters) are incomplete generations. art_nick in (select join_nickname from dbo.sysmergesubsetfilters where (filter_type & 1) = 1) and not exists ( select 1 from @generation_range b where b.genstatus in (1,2) and exists (select 1 from dbo.sysmergesubsetfilters where (join_nickname = b.art_nick or art_nickname = b.art_nick) and (filter_type & 1) = 1) and b.generation > @genstart ) ) ) -- Merge agent is SQL 8.0 or lower -- generations have to fit into 4 byte range declare @maxgen_80 int set @maxgen_80= 2147483647 if (select max(generation) from @generation_range) > @maxgen_80 begin raiserror(21521,16,1,@maxgen_80) return(1) end declare @arbitrary_guidlocal uniqueidentifier, @guidnull uniqueidentifier select @arbitrary_guidlocal = newid() select @guidnull = '00000000-0000-0000-0000-000000000000' select generation, guidsrc, art_nick, case when genstatus in (0, 4) then @guidnull else @arbitrary_guidlocal end, pubid, nicknames, okaytoskip from @generation_range ORDER BY generation ASC return (0)
No comments:
Post a Comment