首页 > 解决方案 > 在 SQL Server 中运行过程的 IF 条件

问题描述

我正在尝试创建一个 if 语句,如果locked=0,那么它应该在下面的程序中执行,如果locked=1,那么它不应该在下面的程序中执行

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[usp_UpdateForecast]
    @ScenarioName VARCHAR(255),
    @FiscalMonthID INT
AS
BEGIN
    SET NOCOUNT ON;

    IF (@FiscalMonthID = (SELECT TOP 1 FISCALMONTHID 
                          FROM ForecastPeriodLock 
                          WHERE locked = 0 AND [STATUS] = 'Close' 
                            AND FiscalMonthId = @FiscalMonthID 
                          ORDER BY FiscalMonthId)
        AND (@FiscalMonthID != 0)) 

        PRINT @FISCALMONTHID;

    PRINT @ScenarioName;

    BEGIN
        EXEC [dbo].[usp_Backup_Tables]

        EXEC SMIStaging.[dbo].[LoadSMIFinancePlanDataToSMIForecastOpCoOpex] 
             @ScenarioName = @ScenarioName, 
             @fiscalmonthid = @FiscalMonthID

        EXEC SMIStaging.[dbo].[LoadSMIFinancePlanDataToSMIForecastOpCoPeriods] 
             @ScenarioName = @ScenarioName,
             @fiscalmonthid = @FiscalMonthID
    END

    PRINT @FISCALMONTHID;
    PRINT @ScenarioName;
END

--EXEC [dbo].[usp_UpdateForecast] @ScenarioName='AOP Plan', @fiscalmonthid=202001

标签: sqlsql-servertsql

解决方案


附上你的 if 条件Begin

Create PROCEDURE [dbo].[usp_UpdateForecast]
@ScenarioName VARCHAR(255)
,@FiscalMonthID INT

AS
BEGIN
    SET NOCOUNT ON;


    IF (
    @FiscalMonthID=(SELECT TOP 1 FISCALMONTHID FROM ForecastPeriodLock WHERE locked = 0 AND [STATUS]='Close' AND FiscalMonthId=@FiscalMonthID ORDER BY FiscalMonthId)
    AND     
    (@FiscalMonthID != 0) 
    ) 
BEGIN
    PRINT @FISCALMONTHID;
    PRINT @ScenarioName;

        EXEC [dbo].[usp_Backup_Tables]

        EXEC SMIStaging.[dbo].[LoadSMIFinancePlanDataToSMIForecastOpCoOpex] @ScenarioName=@ScenarioName, @fiscalmonthid=@FiscalMonthID

        EXEC SMIStaging.[dbo].[LoadSMIFinancePlanDataToSMIForecastOpCoPeriods] @ScenarioName=@ScenarioName, @fiscalmonthid=@FiscalMonthID
    END
        PRINT @FISCALMONTHID;
    PRINT @ScenarioName;
END

推荐阅读