2017-01-19 115 views
-2

下面是MIN函數使用的代碼片段。當執行下面的代碼時,它提供了一個錯誤。MIN函數需要1個參數

CREATE FUNCTION [dbo].[FN_TempCalcTransportExemp] 
(
    @EmployeeID varchar(20), 
    @PayElement varchar(20), 
    @Month varchar(10), 
    @FinYear varchar(10) 
) 
RETURNS decimal 
AS 
BEGIN 
    DECLARE @TarnsportExemption decimal(18,2) = 0 
    DECLARE @TDSIsFullExemption bit 
    DECLARE @PermanentPhysicalDisability decimal(18,2) = 0 
    DECLARE @UsingComapnyCar bit 
    DECLARE @Conveyance decimal(18,2) = 0 
    DECLARE @TransYes decimal(18,2) = 0 
    DECLARE @TransNo decimal(18,2) = 0 

    DECLARE @MinConveyance decimal(18,2) = 0 
    DECLARE @MinTransport decimal(18,2) = 0 

    SELECT 
     @TDSIsFullExemption = TDSDetailsFullExemption, 
     @TransYes = TDSDetailsYes, 
     @TransNo = TDSDetailsNo 
    FROM 
     tbl_TDSSettingDetails 
    WHERE 
     TDSSettingsDetailID = 2 

    SELECT 
     @Conveyance = @Month 
    FROM 
     tbl_Income 
    WHERE 
     EmployeeID = @EmployeeID 
     AND Element = @PayElement 
     AND FinancialYear = @FinYear 

    SELECT 
     @UsingComapnyCar = UsingCompanyCar, 
     @PermanentPhysicalDisability = PermanentPhysicalDisability 
    FROM 
     tbl_Employee_TDS 
    WHERE 
     EmployeeID = @EmployeeID 
     AND TDSFinancialYear = @FinYear 

    IF (@TDSIsFullExemption = 1) 
    BEGIN 
     SET @TarnsportExemption = @Conveyance 
    END 
    ELSE 
    BEGIN 
     IF (@UsingComapnyCar = 1) 
     BEGIN 
      IF (@Conveyance = 0) 
      BEGIN 
       SET @MinConveyance = 0 
      END 
      ELSE 
      BEGIN 
       SET @MinConveyance = @Conveyance 
      END 

      IF (@PermanentPhysicalDisability = 1) 
      BEGIN 
       SET @MinTransport = @TransYes 
      END 
      ELSE 
      BEGIN 
       SET @MinTransport = @TransNo 
      END 

      SET @TarnsportExemption = MIN(@MinConveyance, @MinTransport) 
     END 
     ELSE 
     BEGIN 
      SET @TarnsportExemption = 0 
     END 
    END 

    RETURN @TarnsportExemption 
END 

錯誤消息:

消息174,級別15,狀態1,過程FN_TempCalcTransportExemp, 線66
MIN函數要求1點的參數(一個或多個)。

+0

錯誤正在講話清晰,handel代碼的這一行'set @TarnsportExemption = MIN(@ MinConveyance,@ MinTransport)','MIN'函數需要一個。論點,你通過了兩個。 –

+1

你可以使用這個'選擇@TarnsportExemption =案例當@MinConveyance <@MinTransport 然後@MinConveyance Else @MinTransport結束' – crowchirp

回答

4

set @TarnsportExemption = MIN(@MinConveyance,@MinTransport) - MIN函數不是你認爲的那樣。

你可能想要做這樣的事情:

set @TarnsportExemption = CASE WHEN @MinConveyance < @MinTransport THEN 
           @MinConveyance 
          ELSE 
           @MinTransport 
          END 

另一種選擇是這樣的:

SELECT @TarnsportExemption = MIN(val) 
FROM 
(
    SELECT @MinConveyance as val 
    UNION ALL 
    SELECT @MinTransport as val 
) 

而且多一個選擇是使用值子句:

SELECT @TarnsportExemption = MIN(val) 
FROM (VALUES (@MinConveyance), (@MinTransport)) AS value(val) 
0

改變你的最低陳述如下MIN。請參閱MIN (Transact-SQL)

--fROM 
set @TarnsportExemption = MIN(@MinConveyance,@MinTransport) 

--To 
SELECT @TarnsportExemption = MIN(A) FROM (
SELECT @MinConveyance A 
UNION ALL 
SELECT @MinTransport 
)AS AA 
0

在SQL中,MIN函數將返回您從選定列表中列的最小值;所以你只能在內聯查詢中使用MIN。

例如從Tbl_Employee選擇分鐘(工資)

所以,在你的情況下,或者您可以使用情況,那麼當或UNION ALL從兩個變量得到最小值: -

SET @TarnsportExemption = CASE WHEN @MinConveyance < @MinTransport THEN @MinConveyance ELSE @MinTransport END

OR

SELECT @TarnsportExemption = MIN(TEMPS。[VALUE]) FROM(SELECT AS @MinConveyance VALUE

UNION ALL

SELECT @MinTransport AS VALUE )AS滕普斯

+0

你的答案提供什麼信息,我的沒有? –

相關問題