2016-06-17 8 views
0

ここで間違っていることがわかりません。私を訂正してください。私は私のストアドプロシージャでこのロジックを書いていますが、私はエラーを取得SQL ServerストアドプロシージャのIF条件

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ステートメントにいくつかのかっこがありません。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 
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 

残念なことに答えが限られています。私は後でそれを肉体にするかもしれませんが、これがあなたを稼働させてくれることを願っています。

関連する問題