create procedure sys.sp_MSBitmapXOr
@bm1 varbinary(128),
@bm2 varbinary(128),
@bmout varbinary(128) output
as
declare @len1 int
set @len1= datalength(@bm1)
declare @len2 int
set @len2= datalength(@bm2)
declare @idx int
set @idx= 1
while @idx <= @len2
begin
if 1=@idx
begin
set @bmout= cast(substring(@bm1, @idx, 1) as tinyint) cast(substring(@bm2, @idx, 1) as tinyint)
if @@error<>0 return 1
end
else
begin
set @bmout= @bmout + cast(cast(substring(@bm1, @idx, 1) as tinyint) cast(substring(@bm2, @idx, 1) as tinyint) as varbinary)
if @@error<>0 return 1
end
set @idx= @idx+1
end
if @len1 > @len2
begin
set @bmout= @bmout + substring(@bm1, @idx, @len1-@len2)
if @@error<>0 return 1
end
return 0