首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server存储过程中的IF ELSE

SQL Server存储过程中的IF ELSE
EN

Stack Overflow用户
提问于 2016-05-31 02:37:54
回答 1查看 80关注 0票数 0

我试图在Server存储过程中完成IF ELSE语句,但它似乎不符合条件。我试图声明一个静态值,让我检查它,但它仍然是一样的。我的问题是,即使条件不对,它也不会去ELSE

下面是代码:

代码语言:javascript
复制
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

编辑:选择@应该是

代码语言:javascript
复制
SELECT @Amount = 1,@OfficeID = 72,@AccountID = 733, @NoOfMonths = 12, @Percentage = 1.25, @isRoundOf = 1, @MaxAmount = 35000, @EmployeeType = 1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 02:57:10

正如您自己注意到的-- @Amount在您的SELECT列表中列出了两次,有两个不同的值。

修起来容易。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37535994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档