create procedure sys.sp_MSreplicationcompatlevel
@dbname sysname,
@cmptlevel float(8)
As
declare @is_distdb smallint
select @is_distdb = 0
IF EXISTS (select * from msdb.sys.objects where name='MSdistributiondbs')
begin
IF EXISTS (SELECT * FROM msdb..MSdistributiondbs where name=@dbname)
select @is_distdb = 1
end
/*
** Parameter check
** @dbname
*/
IF NOT EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE
name = @dbname collate database_default)
BEGIN
RAISERROR(15010, 16, -1, @dbname)
RETURN(2)
END
select @dbname = QUOTENAME(@dbname)
/*
** Parameter check. NOTE
** @cmptlevel
*/
IF @cmptlevel<6.0
BEGIN
RAISERROR(20060,16,-1)
RETURN(2)
END
/*
** If cmptlevel is lower than 7.0, special attention should be paid.
** If current database is a distribution database or is involed in merge
** replication, then it can not be set to a level lower than 7.0.
*/
create table #tmp (any_merge smallint NOT NULL)
insert into #tmp exec ('select count(*) from ' + @dbname + '.sys.objects where name=' + '''sysmergesubscriptions''' )
if (exists(select any_merge from #tmp where any_merge>0) OR @is_distdb = 1)
AND (@cmptlevel<7.0)
begin
drop table #tmp
return 1
end
else
begin
drop table #tmp
return 0
end