2011-03-22 91 views
0

如果我使用它在总operator.It此功能不起作用说“操作数的数据类型为nvarchar的总和operator.invalid的”。什么是它的easisest解决方案吗?我在很多地方使用这个功能给出结果数字或nvarchar.Thanks您的帮助。MS SQL用户自定义函数

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 
+0

你到底想达到为int?连接函数返回的所有字符串,或者实际上在这些变量中有字符串形式的数字? – Kaerber 2011-03-22 07:42:38

回答

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 

或浇铸结果的总和

select sum(cast(dbo.decode('1','1','3','4') as int)) 
+0

我不能INPT参数类型改变,因为我使用此功能为nvarchar输出too.I原本以为第二个解决方案以前写here.Just要检查是否有š任何解决方案比乌尔第二way.Thanks容易UR帮助 – JCash 2011-03-22 07:59:29

+0

@JCash你可以还加解码,DecodeInt的整数版本,并使用,当你需要处理的整数。 – 2011-03-22 08:05:34

+0

是的,我做到了:) – JCash 2011-03-22 08:15:50