2016-08-15 21 views
0

メッセージ134、レベル15、状態1、行21
変数名 '@AsOfDate'は既に宣言されています。変数名は、クエリ・バッチまたはストアド・プロシージャ内で一意である必要があります。SQL Server 2014のIFステートメントで変数を設定する

IF文のセットを実行しているときにこのエラーが発生します。理想的には、私が関心を持っている四半期に私のビットを1に切り替えるだけで、自分のコードを実行するだけです。 IFステートメントは、必要な日付を設定します。

私はIFELSE IFでこれを試しましたが、どちらも違いはありません。どのように私がこれを行うことができるかに関するどんな提案も非常に高く評価されるでしょう。悲しいことに、これらのレポートはいつでも要求される可能性があるため、私が(あるいは前の)四半期を選ぶことはできません。

------------------------- 
-- Choose Quarter -- 
------------------------- 
DECLARE @Q1  BIT = 0 
DECLARE @Q2  BIT = 0 
DECLARE @Q3  BIT = 0 
DECLARE @Q4  BIT = 0 
DECLARE @Annual BIT = 0 
------------------------- 
--Q1 
IF @Q1 = '1' 
BEGIN 
    DECLARE @AsOfDate datetime = '2016-03-31'; 
    DECLARE @StartDate datetime = '2016-01-01' 
END 

--Q2 
IF @Q2 = '1' 
BEGIN 
    DECLARE @AsOfDate datetime = '2016-06-30'; 
    DECLARE @StartDate datetime = '2016-04-01' 
END 

--Q3 
IF @Q3 = '1' 
BEGIN 
    DECLARE @AsOfDate datetime = '2016-09-30'; 
    DECLARE @StartDate datetime = '2016-07-01' 
END 

--Q4 
IF @Q4 = '1' 
BEGIN 
    DECLARE @AsOfDate datetime = '2016-12-31'; 
    DECLARE @StartDate datetime = '2016-10-01' 
END 

-- ANNUAL 
IF @Annual = '1' 
BEGIN 
    DECLARE @AsOfDate datetime = '2016-12-31'; 
    DECLARE @StartDate datetime = '2016-01-01' 
END 

-- Check to ensure a time period is set 
IF (@Q1 = 0 AND @Q2 = 0 AND @Q3 = 0 AND @Q4 = 0 AND @ANNUAL = 0) 
BEGIN 
    PRINT 'NO TIME SET' 
END 
-- Run Code with dates 
ELSE 
BEGIN 

EDIT:

無視...実際に私のエラーとコードの読み取りが明確に私は問題ではない変数の設定であることを宣言を指して...解決策は、私のIFの外で変数を宣言することですステートメント内にそれらを設定します。

+1

問題の解決策を見つけられたらうれしいです。他の人がそれを見ることができるようにあなたの質問を編集するのではなく、答えとしてあなたのソリューションを投稿するべきです。 –

+0

回答を投稿してください。あなたの質問のコードを正しく更新しないでください。それはちょうど混乱している。 – Blorgbeard

+0

合意して、元のエラーコードを表示するために質問を再編集します。なぜ私は単に答えを投稿するとは思わなかったのか分かりませんが、私は質問を提起したので、それが起こったので、私は推測します:D – Izulien

答えて

1

すべてのIF文の前に宣言するのではなく、各IF文で宣言していました。以下は、コードの更新版です。

DECLARE @ASOfDate DATETIME 
DECLARE @StartDate DATETIME 
------------------------- 
-- Choose Quarter -- 
------------------------- 
DECLARE @Q1  BIT = 0 
DECLARE @Q2  BIT = 0 
DECLARE @Q3  BIT = 0 
DECLARE @Q4  BIT = 0 
DECLARE @Anual BIT = 0 
------------------------- 
--Q1 
    IF @Q1 = '1' 
     BEGIN 
      SET @AsOfDate = '2016-03-31' ; SET @StartDate = '2016-01-01' 
     END 
--Q2 
    IF @Q2 = '1' 
     BEGIN 
      SET @AsOfDate = '2016-06-30' ; SET @StartDate = '2016-04-01' 
     END 
--Q3 
    IF @Q3 = '1' 
     BEGIN 
      SET @AsOfDate = '2016-09-30' ; SET @StartDate = '2016-07-01' 
     END 
--Q4 
    IF @Q4 = '1' 
     BEGIN 
      SET @AsOfDate = '2016-12-31' ; SET @StartDate = '2016-10-01' 
     END 
--ANUAL 
    IF @Anual = '1' 
     BEGIN 
      SET @AsOfDate = '2016-12-31' ; SET @StartDate = '2016-01-01' 
     END 
-- Check to ensure a time period is set 
IF (@Q1 = 0 AND @Q2 = 0 AND @Q3 = 0 AND @Q4 = 0 AND @ANUAL = 0) 
    BEGIN 
     PRINT 'NO TIME SET' 
    END 
-- Run Code with dates 
ELSE 
BEGIN 
Start of Actual Program using dates shown 
END 
関連する問題