繁体   English   中英

IF ELSE在SQL Server存储过程中

[英]IF ELSE in SQL Server stored procedure

我正在尝试在SQL Server存储过程中完成IF ELSE语句,但似乎它不会遵循该条件。 我试图为我声明一个静态值以进行检查,但它仍然相同。 我的问题是,即使条件错误,它也不会进入ELSE

这是代码:

ALTER PROCEDURE [dbo].[Amount_Computation]
    (@OfficeID int,
     @AccountID int,
     @Amount int,
     @NoOfMonths int,
     @Percentage int,
     @isRoundOf int,
     @MaxAmount int,
     @EmployeeType int)
AS
    declare @TotalAmount table(TotalAmount int)
    declare @Casual table(CasualSalary int, OfficeID int)
    declare @Regular table(RegularSalary int, OfficeID int)

    declare @basic int
BEGIN
    SELECT 
        @Amount = 1, @OfficeID = 72,
        @AccountID = 733, @Amount = 0, 
        @NoOfMonths = 12, @Percentage = 1.25, 
        @isRoundOf = 1, @MaxAmount = 35000, 
        @EmployeeType = 1

    IF(@Amount = 0)
    BEGIN
         INSERT INTO @Casual 
             SELECT 
                 CAST(((select LEFT(CONVERT(nvarchar,CAST((Case when (basic * 22 > @MaxAmount) then @MaxAmount ELSE Basic * 22 END) AS INT)),LEN(CONVERT(nvarchar,CAST((Case when (basic * 22 > @MaxAmount) then @MaxAmount ELSE Basic * 22 END) AS INT))) - 3)) + '000' ) AS INT ) * @Percentage / 100 * @NoOfMonths as Casual, 
                 a.OfficeID 
             FROM 
                 pmis.dbo.vw_RGPermanentAndCasual as a 
             LEFT JOIN 
                 ifmis.dbo.tbl_R_BMSOffices as b ON b.PMISOfficeID = a.OfficeID 
             WHERE 
                 a.OfficeID = @OfficeID AND a.EmploymentGroup = '2'

        INSERT INTO @Regular 
            SELECT 
                CAST(((select LEFT(CONVERT(nvarchar,CAST((Case when (basic > @MaxAmount) then @MaxAmount ELSE Basic END) AS INT)),LEN(CONVERT(nvarchar,CAST((Case when (basic > @MaxAmount) then @MaxAmount ELSE Basic END) AS INT))) - 3)) + '000' ) AS INT ) * @Percentage / 100 * @NoOfMonths as Regular, 
                a.OfficeID 
            FROM 
                pmis.dbo.vw_RGPermanentAndCasual as a 
            LEFT JOIN 
                ifmis.dbo.tbl_R_BMSOffices as b ON b.PMISOfficeID = a.OfficeID 
            WHERE 
                a.OfficeID = @OfficeID AND a.EmploymentGroup = '1'

        INSERT INTO @TotalAmount 
            SELECT 
                SUM(CasualSalary) + SUM(RegularSalary) 
            FROM 
                @Casual as a 
            LEFT JOIN 
                @Regular as b ON b.OfficeID = a.OfficeID
    END
    ELSE IF(@Amount = 1)
    BEGIN
        INSERT INTO @TotalAmount 
            SELECT SUM(CasualSalary) as ELSE_IF 
            FROM @Casual
    END
END

/**SELECT CasualSalary FROM @Casual
SELECT RegularSalary FROM @Regular **/
SELECT TotalAmount FROM @TotalAmount

编辑:选择@Amount应该是

SELECT @Amount = 1,@OfficeID = 72,@AccountID = 733, @NoOfMonths = 12, @Percentage = 1.25, @isRoundOf = 1, @MaxAmount = 35000, @EmployeeType = 1

如您@Amount - @AmountSELECT列表中列出了两次,具有两个不同的值。

轻松修复。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM