为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:03134284604-20260707-335949-20228
【操作系统】:Kylin V10
【CPU】:x86
【问题描述】*:SQL server迁移DM,创建函数报错:[RETURNS]附近出现错误
CREATE function GetDigits
(@Number varchar(100),@ttype int/*0:小数位数,1:数字位数*/)
RETURNS int
AS
BEGIN
if CHARINDEX('E+',@Number) > 0
SELECT @Number = cast(abs(cast(left(@Number,CHARINDEX('E+',@Number) - 1) as decimal(38,20))
* POWER(10,right(@Number,len(@Number) - CHARINDEX('E+',@Number) - 1))) as varchar(100))
else if CHARINDEX('E-',@Number) > 0
SELECT @Number = cast(abs(cast(left(@Number,CHARINDEX('E-',@Number) - 1) as decimal(38,20))
/ POWER(10,right(@Number,len(@Number) - CHARINDEX('E-',@Number) - 1))) as varchar(100))
else if CHARINDEX('E',@Number) > 0
SELECT @Number = cast(abs(cast(left(@Number,CHARINDEX('E',@Number) - 1) as decimal(38,20))
* POWER(10,right(@Number,len(@Number) - CHARINDEX('E',@Number)))) as varchar(100))
else
SELECT @Number = cast(abs(CAST(@Number as decimal(38,20))) as varchar(100))
WHILE RIGHT(@Number,1) = 0 and CHARINDEX('.',@Number) > 0 and left(RIGHT(@Number,2),1) <> '.'
BEGIN
Set @Number = LEFT(@Number,LEN(@Number) - 1)
END
declare @digits int
IF @ttype = 0
begin
select @digits = case when CHARINDEX('.',@Number) > 0 and right(@Number,1) <> 0 then len(@Number) - CHARINDEX('.',@Number) else 0 end
end
else if @ttype = 1
begin
select @digits = case when right(@Number,1) = 0 then charindex('.',@Number) - 1 else len(replace(@Number,'.','')) end
end
return @digits
END
RETURNS 手动改RETURN就好了,应该是dts没转换到,但是后续也有很多需要处理。

1、用dts将所有函数都导出成脚本
2、使用文本编辑器 批量修改returns为return
2、在达梦管理工具中执行修改后的脚本语句;