【问题标题】:SQL - Declare scalar variable error (for SSRS Report)SQL - 声明标量变量错误(用于 SSRS 报告)
【发布时间】:2025-12-26 17:50:11
【问题描述】:

这是我在运行如下所示的查询时遇到的错误:必须声明标量变量“@ReportDate”。 “标签”附近的语法不正确。 “GroupOrder”附近的语法不正确。必须声明标量变量“@Demographics1”。

如何编写此查询以无错误地运行?

我的 ReportDate 是日期时间 我的 Demographics1 是 varchar(max)

这里是查询:

SELECT DISTINCT 
   'Age' DemographicGroup, CASE WHEN DATEDIFF(YY, [Date of Birth],  @ReportDate) < 25 THEN '<=25' 
                                WHEN DATEDIFF(YY, [Date of Birth], @ReportDate) BETWEEN 25 AND 35 THEN '26-35' 
                                WHEN DATEDIFF(YY, [Date of Birth], @ReportDate) BETWEEN 36 AND 45 THEN '36-45' 
                                WHEN DATEDIFF(YY, [Date of Birth], @ReportDate) > 45 THEN '46+' 
                            END Label, 
                           CASE WHEN DATEDIFF(YY, [Date of Birth], @ReportDate) < 25 THEN 1 
                                WHEN DATEDIFF(YY, [Date of Birth], @ReportDate) BETWEEN 25 AND 35 THEN 2 
                                WHEN DATEDIFF(YY, [Date of Birth], @ReportDate) BETWEEN 36 AND 45 THEN 3 
                                WHEN DATEDIFF(YY, [Date of Birth], @ReportDate) > 45 THEN 4 
                            END GroupOrder
INTO        #Demo2
FROM     [dbo].[Dim_Borrower]
UNION
SELECT DISTINCT 'Marital Status', [Marital Status], 1
FROM     [dbo].[Dim_Borrower]
UNION
SELECT DISTINCT 'Race', Race, 1
FROM     [dbo].[Dim_Borrower]
UNION
SELECT DISTINCT 'Sex', Sex, 1
FROM     [dbo].[Dim_Borrower]

                      SELECT   *,DemographicGroup + ' - ' + Label RealLabel
                      FROM     #Demo2
                      WHERE  DemographicGroup IN (@Demographics1)
                      ORDER BY DemographicGroup, GroupOrder

【问题讨论】:

  • 哪个 dbms? (这肯定不是 ANSI SQL 语法……)
  • 你确定这是整个查询吗?因为你有 2 个查询
  • 错过声明变量Declare @ReportDate date,@Demographics1 varchar(50)除此之外查询没有错误

标签: sql visual-studio-2010 variables reporting-services syntax


【解决方案1】:

此时您已经声明了这两个变量@ReportDate 和@Demographics1。

你必须有一些类似的行

Declare @ReportDate DateTime;
Delcare @Demographics1 varchar(max);

【讨论】:

  • 谢谢拉胡尔。我在查询中的哪个位置放置“声明”?我明白我必须这样做......我只是想知道在哪里
  • 在查询的最开始,你还需要给它赋值。使用“设置”语句
  • 这个怎么样(在 Select Distinct 之后)DECLARE atReportDate Datetime = '6/27/2013' DECLARE atDemographics1 varchar(max) SET atReportDate = '6/27/2013' atDemographics1 = 'Marital Status'