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