注册

[RETURNS]附近出现错误

DM_009527 2026/09/16 300 5 已解决

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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没转换到,但是后续也有很多需要处理。

回答 0
暂无回答
扫一扫
联系客服