2011-03-22 75 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