Msg 134,Level 15,State 1,Line 21
变量名'@AsOfDate'已经被声明。变量名在查询批处理或存储过程中必须是唯一的。
运行一组IF语句时出现此错误。理想情况下,我只需要在我感兴趣的季度将我的位切换为1,然后执行我的代码。 IF
语句将设置我需要的日期。
我已尝试使用IF
和ELSE 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语句之外声明变量并在语句中设置它们。
答案 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