create procedure sys.sp_MSrepl_changesubscriber
(
@subscriber sysname,
@type tinyint,
@login sysname,
@password sysname,
@commit_batch_size int,
@status_batch_size int,
@flush_frequency int,
@frequency_type int,
@frequency_interval int,
@frequency_relative_interval int,
@frequency_recurrence_factor int,
@frequency_subday int,
@frequency_subday_interval int,
@active_start_time_of_day int,
@active_end_time_of_day int,
@active_start_date int,
@active_end_date int,
@description nvarchar (255),
@security_mode int,
@publisher sysname,
@publisher_type sysname
)
AS
BEGIN
DECLARE @distributor sysname
DECLARE @distribdb sysname
DECLARE @distproc nvarchar (300)
DECLARE @msg nvarchar(255)
DECLARE @retcode int
DECLARE @platform_nt binary
DECLARE @srvname sysname
SELECT @srvname = publishingservername()
-- Set publisher name for SQL Servers
IF (@publisher IS NULL) AND (@publisher_type = N'MSSQLSERVER')
SET @publisher = @srvname
/*
** Security Check: require sysadmin
*/
IF (ISNULL(IS_SRVROLEMEMBER('sysadmin'),0) = 0)
BEGIN
RAISERROR(21089,16,-1)
RETURN (1)
END
select @platform_nt = 0x1
IF (UPPER(@subscriber) = UPPER(@srvname)
AND @platform_nt != ( platform() & @platform_nt ) AND @security_mode = 1)
BEGIN
RAISERROR(21038, 16, -1)
RETURN (1)
END
/*
** Get distribution server information for remote RPC
** subscription calls.
*/
EXEC @retcode = sys.sp_MSrepl_getdistributorinfo @rpcsrvname = @distributor OUTPUT,
@distribdb = @distribdb OUTPUT,
@publisher = @publisher
IF @@ERROR <> 0 OR @retcode <> 0
BEGIN
RAISERROR (14071, 16, -1)
RETURN (1)
END
DECLARE @intnull int
/*
** Update MSsubscriber_info
*/
SELECT @distproc = QUOTENAME(RTRIM(@distributor)) + '.' +
QUOTENAME(RTRIM(@distribdb)) + '.dbo.sp_MSupdate_subscriber_info'
EXEC @retcode = @distproc
@publisher,
@subscriber,
@type,
@login,
@password,
@commit_batch_size,
@status_batch_size,
@flush_frequency,
@frequency_type,
@frequency_interval,
@frequency_relative_interval,
@frequency_recurrence_factor,
@frequency_subday,
@frequency_subday_interval,
@active_start_time_of_day,
@active_end_time_of_day,
@active_start_date,
@active_end_date,
@retryattempts = @intnull,
@retrydelay = @intnull,
@description = @description,
@security_mode = @security_mode
IF @@ERROR <> 0 OR @retcode <> 0
BEGIN
RAISERROR (14048, 16, -1, @subscriber)
RETURN (1)
END
END