【问题标题】:Setting Variables in IF statements in SQL Server 2014在 SQL Server 2014 的 IF 语句中设置变量
【发布时间】:2016-08-15 20:08:46
【问题描述】:

消息 134,第 15 级,状态 1,第 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 语句之外声明变量并在语句中设置它们。

【问题讨论】:

  • 很高兴您能够找到解决问题的方法。您应该将您的解决方案作为答案发布,而不是编辑您的问题,以便其他人能够看到它。
  • 请发布答案,不要更新您的问题代码以使其正确。这只是令人困惑。
  • 同意,我将重新编辑我的问题以显示原始错误代码。不知道为什么我不考虑简单地发布答案,我猜是因为它发生在我提出问题时是正确的:D

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2021-09-14
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多