MS SQL用户定义函数

时间:2011-03-22 07:36:56

标签: tsql sql-server-2008

如果我在Sum运算符中使用它,这个函数不起作用。它说“操作数数据类型nvarchar是sum operator.invalid for”。最简单的解决方案是什么?我在许多地方使用这个函数给出结果数字或nvarchar。感谢您的帮助。

 USE [DSS]
    GO
    /****** Object:  UserDefinedFunction [dbo].[DECODE]    Script Date: 03/22/2011 09:30:20 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER FUNCTION [dbo].[DECODE]
    (@Val1 nvarchar(20),@Val2 nvarchar(10),@Val3 nvarchar(10),@Val4 nvarchar(10))
    RETURNS nvarchar(10)
    AS 
     BEGIN 
      RETURN 
      (
      Select case @Val1 When @Val2 then @Val3 else @Val4 end
      )
    END

1 个答案:

答案 0 :(得分:1)

总和适用于整数。将数据类型更改为int,它应该适合您。

CREATE FUNCTION [dbo].[DECODE]
  (@Val1 int,@Val2 int,@Val3 int,@Val4 int)
RETURNS int
AS 
BEGIN 
  RETURN 
  (
    Select case @Val1 When @Val2 then @Val3 else @Val4 end
  )
END

或者将结果转换为总和

中的int
select sum(cast(dbo.decode('1','1','3','4') as int))