2016-06-17 4 views
0

Не уверен, что я делаю неправильно здесь. Не могли бы вы поправить меня?Условие IF в хранимой процедуре SQL Server

Я пишу эту логику в моей хранимой процедуре, но я получаю сообщение об ошибке:

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
Incorrect syntax near the keyword 'END'.

Msg 156, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'END'.

Msg 156, Level 15, State 1, Line 14
Incorrect syntax near the keyword 'END'.

Msg 156, Level 15, State 1, Line 18
Incorrect syntax near the keyword 'END'.

+1

Вы в SQL нет необходимости для == попробуйте заменить = –

+0

Спасибо Дэну за указание для меня .. Мой бог, я не знаю, почему я не сделал признал, что :) теперь я получаю новую ошибку. :) – user300485

ответ

5

Это трудно прочитать и, к сожалению, пронизано проблемами синтаксиса.

Вам не хватает нескольких скобок в операциях SET, и вы не можете объединить int и varchar.

Попробуйте это ...

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 
2

Хорошо, так что я думаю, что это то, что вы ищете.

declare @PERIOD AS VARCHAR(7) 

IF(DATEPART(MONTH, GETDATE()) = 1 or DATEPART(MONTH, GETDATE()) = 2 or DATEPART(MONTH, GETDATE()) = 3) 


    BEGIN 
     SET @PERIOD = CAST (DATEPART(YEAR,GETDATE()) AS VARCHAR) + ' Q1' 
    END 
else IF(DATEPART(MONTH, GETDATE()) = 4 or DATEPART(MONTH, GETDATE()) = 5 or DATEPART(MONTH, GETDATE())= 6) 
    BEGIN 
     SET @PERIOD = CAST (DATEPART(YEAR,GETDATE()) AS VARCHAR) + ' Q2' 
    END 
else IF(DATEPART(MONTH, GETDATE()) = 7 or DATEPART(MONTH, GETDATE()) = 8 or DATEPART(MONTH, GETDATE()) = 9) 
    BEGIN 
     SET @PERIOD = CAST (DATEPART(YEAR,GETDATE()) AS VARCHAR) + ' Q3' 
    END 
else IF (DATEPART(MONTH, GETDATE()) = 10 or DATEPART(MONTH, GETDATE()) = 11 or DATEPART(MONTH, GETDATE()) = 12) 
    BEGIN 
     SET @PERIOD = CAST (DATEPART(YEAR,GETDATE()) AS VARCHAR)+ ' Q4' 
    END 

Извините за слабый ответ, ограниченное время. Я смогу это позже, но надеюсь, что это заставило вас работать.

Смежные вопросы