在SQL Server 2014中设置IF语句中的变量

时间:2016-08-15 20:08:47

标签: variables if-statement sql-server-2014

  

Msg 134,Level 15,State 1,Line 21
  变量名'@AsOfDate'已经被声明。变量名在查询批处理或存储过程中必须是唯一的。

运行一组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 :(得分: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