May 7, 2012

sp_MSaddanonymousreplica (Transact-SQL MetaData) Definition

Please note: that the following source code is provided and copyrighted by Microsoft and is for educational purpose only.
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_MSaddanonymousreplica(nvarchar @publication
, nvarchar @publisher
, nvarchar @publisherDB
, int @anonymous
, int @sync_type)

MetaData:

 create procedure sys.sp_MSaddanonymousreplica  
(@publication sysname,
@publisher sysname,
@publisherDB sysname,
@anonymous int,
@sync_type int = 1, -- sync type is automatic by default --
@preexists bit=0 OUTPUT
)
as
set nocount on
declare @retcode int
declare @subscription_type nvarchar(15)
declare @sync_typestr nvarchar(15)
declare @sub_typeid int
declare @pubid uniqueidentifier

--
-- need more than PAL to do this since this is run at the subscriber site
--
exec @retcode = sp_MSreplcheck_subscribe
if @@error<>0 or @retcode<>0
begin
RAISERROR (14126, 11, -1)
return 1
end

select @preexists = 0

select @subscription_type = 'default'

if @anonymous = 1
begin
select @subscription_type = 'anonymous'
select @sub_typeid = 2 -- subscription type value for anonymous
end
else if @anonymous = 2
begin
select @subscription_type = 'lightweight'
select @sub_typeid = 3 -- subscription type value for lightweight
end
else
begin
select @subscription_type = 'local'
select @sub_typeid = 1 -- subscription type value for well known pull
end

if @sync_type = 1 select @sync_typestr = 'automatic'
else select @sync_typestr = 'none'

-- this change is made so that we will try to add pull/anonymous subscriptions, even if
-- there is a already a subscription for that publication, however the subscription type
-- does not match. In this way we can prevent users from using incorrect subscription type
-- through command line or merge control.
if object_id('sysmergepublications') is not NULL
begin
select @pubid=pubid from dbo.sysmergepublications
where name=@publication and UPPER(publisher)=UPPER(@publisher) and publisher_db = @publisherDB

if @pubid is not NULL
begin
-- Check if theres is a subscriptions entry that matches the pubid and current subscription with the right type --
if exists (select * from dbo.sysmergesubscriptions where pubid =@pubid and UPPER(subscriber_server) = @@SERVERNAME and db_name = DB_NAME() and subscription_type=@sub_typeid)
begin
select @preexists = 1
return (0) -- replica exists.
end
--
-- Check if theres is a subscriptions entry that matches the pubid and current subscription -
-- If there is a match and the types are not the same, then return appropriate error.
--
else if exists (select * from dbo.sysmergesubscriptions where pubid =@pubid and UPPER(subscriber_server) = @@SERVERNAME and db_name = DB_NAME())
begin
RAISERROR (21500, 16, -1, @publication)
-- replica exists with wrong subscription type
select @preexists = 1

return (1)
end
end
end

-- Call this SP to add this replica
exec @retcode = sys.sp_addmergepullsubscription
@publication = @publication,
@publisher = @publisher,
@publisher_db=@publisherDB,
@subscriber_type =@subscription_type,
@sync_type = @sync_typestr
IF @retcode<>0 or @@ERROR<>0 return (1)
return (0)

No comments:

Post a Comment

Total Pageviews