2016-08-15 65 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 

編輯:

無視...其實看完我的錯誤和代碼清楚地表明瞭我的定義所問題的變量沒有設置......解決辦法是宣佈我的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