create procedure sys.sp_MSreplcheck_name
@name sysname,
@parametername sysname, -- Used to generate more actionable error message.
@procname sysname,
@raise_error bit = 1
AS
declare @index int
Set nocount on
-- Name cannot be NULL or empty ("")
-- Blank identifiers (" ") are allowed
IF (@name is null OR datalength(@name) = 0)
begin
if @raise_error = 1
raiserror (14043,16,-1, @parametername, @procname)
return (1)
end
-- Check for proscribed characters
declare @length int
select @length = datalength( @name ) / 2
select @index = 1
while @index < @length
begin
if( 0 = unicode( substring( @name, @index, 1 ) ) )
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = @index + 1
end
--check for other proscribed characters
select @index = charindex( N'%', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N'*', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N'[', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N']', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N'|', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N':', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N'"', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N'?', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
/*
** Fix 52855 - allow single quote
**
select @index = charindex(N'''', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
*/
select @index = charindex(N'\', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N'/', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N'<', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
select @index = charindex(N'>', @name)
if (@index <> 0)
begin
if @raise_error = 1
raiserror(15006,16,-1,@name)
return (1)
end
-- return success
return (0)