SQL Server存储过程中的IF条件

时间:2016-06-17 04:10:14

标签: sql-server sql-server-2008

不确定我在这里做错了什么。你能纠正我吗?

我在我的存储过程中编写了这个逻辑,但是我收到了一个错误:

DECLARE @PERIOD AS VARCHAR(7)

BEGIN
    IF(MONTH(GETDATE()) = 1 or MONTH(GETDATE()) = 2 or MONTH(GETDATE()) = 3)
    BEGIN
        SET @PERIOD = YEAR(GETDATE() + ' Q1'
    END
    ELSE IF(MONTH(GETDATE()) = 4 or MONTH(GETDATE()) = 5 or MONTH(GETDATE()) = 6)
    BEGIN
        SET @PERIOD = YEAR(GETDATE() + ' Q2'
    END
    ELSE IF(MONTH(GETDATE()) = 7 or MONTH(GETDATE()) = 8 or MONTH(GETDATE()) = 9)
    BEGIN
        SET @PERIOD = YEAR(GETDATE() + ' Q3'
    END
    ELSE IF (MONTH(GETDATE()) = 10 or MONTH(GETDATE()) = 11 or MONTH(GETDATE()) = 12)
    BEGIN
        SET @PERIOD = YEAR(GETDATE() + ' Q4'
    END
END

错误是:

  

Msg 156,Level 15,State 1,Line 6
  关键字' END'附近的语法不正确。

     

Msg 156,Level 15,State 1,Line 10
  关键字' END'附近的语法不正确。

     

Msg 156,Level 15,State 1,Line 14
  关键字' END'附近的语法不正确。

     

Msg 156,Level 15,State 1,Line 18
  关键字' END'附近的语法不正确。

2 个答案:

答案 0 :(得分:5)

这很难阅读,遗憾的是语法问题很多。

您在SET语句中遗漏了几个括号,而且您无法连接intvarchar

试试这个......

DECLARE @PERIOD AS VARCHAR(7)

DECLARE @MONTHVAL INT, @YEARVAL VARCHAR(4)
SET @MONTHVAL = MONTH(GETDATE())
SET @YEARVAL = CONVERT(VARCHAR(4),YEAR(GETDATE()))

SET @PERIOD = CASE WHEN @MONTHVAL IN (1,2,3) THEN @YEARVAL + ' Q1'
                   WHEN @MONTHVAL IN (4,5,6) THEN @YEARVAL + ' Q2'
                   WHEN @MONTHVAL IN (7,8,9) THEN @YEARVAL + ' Q3'
                   WHEN @MONTHVAL IN (10,11,12) THEN @YEARVAL + ' Q4'
              END

SELECT @PERIOD

答案 1 :(得分:2)

好的,所以我认为这就是你要找的东西。

{{1}}

抱歉,时间有限。我可能会在以后充实它,但我希望这会让你起步并运行。