自定义函数 报错有关问题

自定义函数 报错问题
我想自己写个函数实现把字符串按照 汉字,非汉字进行分隔成2个字符串
比如‘aaa天ddd' 分割成’aaaddd'和'天'
我写的是这样。(参数2用来控制用户到底要返回汉字字符串还是飞汉字字符串)
只是针对我的思路来提供解决,不要告诉我换个思路。返回类型设置成表这样的。
create function [dbo].[spilt_eng_chinese]
(@char varchar(1000),@type int)
returns varchar(1000)
as 
begin 
declare @eng varchar(1000)='',@chinese varchar(1000)=''
if (@type not in(1,2))
return  '参数2必须是1或者0'
else 
begin 
while  PATINDEX('%[吖-咗]%',@char)>0
begin 
 set @chinese=@chinese+SUBSTRING(@char,PATINDEX('%[吖-咗]%',@char),1)
 set @char=STUFF(@char,PATINDEX('%[吖-咗]%',@char),1,'')
 end 
 set @eng=@char
 end
if(@type=1)
 return @eng 
else
return  @chinese
 end 

我现在有2个问题
1,我先写判断@type 如果不是0或者1,直接报错‘参数2必须是0或者1’我这种不行。
2,后面报错。提示函数的最后一行必须是返回值。
没写过自定义函数。不太懂。
 
------解决思路----------------------
1异常,你可以参考一下
http://www.cnblogs.com/renyb/archive/2012/05/23/2515139.html
2,你把两个赋成一个返回 不就可以了吗?
------解决思路----------------------
1、用 RAISERROR 语句
2、最后加一句 RETURN NULL,跑不到无所谓,符合语法规则而已。
------解决思路----------------------
看看这样行不行

create function [dbo].[spilt_eng_chinese]
(@char varchar(1000),@type int)
returns varchar(1000)
as 
begin 
declare @eng varchar(1000)='',@chinese varchar(1000)=''
declare @return varchar(1000)= '参数2必须是1或者0';
if (@type in (1,0))
begin
while  PATINDEX('%[吖-咗]%',@char)>0
begin 
 set @chinese=@chinese+SUBSTRING(@char,PATINDEX('%[吖-咗]%',@char),1)
 set @char=STUFF(@char,PATINDEX('%[吖-咗]%',@char),1,'')
  
 set @eng=@char;
 end
end
if @type=1
set @return=@eng;
else if @type=0
set @return=@chinese;


return @return;
 
 end 
 

------解决思路----------------------
我试了下,把自定义异常放进函数~~
在函数内对带副作用的或依赖于时间的运算符的使用无效

我觉得与其报错,不如容错
不在范围内的东西,取个默认值
------解决思路----------------------
刚刚查了一下,自定义函数内不能使用 RAISERROR!所以没法直接报错。
你可以约定返回 NULL 表示有错,如果要返回具体的错误信息,再加一个 OUTPUT 型的参数。

------解决思路----------------------
人家系统函数是二大爷,能比吗?
取个默认值,我的意思是,例如你的情况,0 和 1以外的情况不要,所以不是0或1就当成1或0来处理,当然这在有些情况不合理,也可以返回个默认值,比如0或1以外的就返回空,如#9的说法