【问题标题】:Must declare Scalar variable - error from parameter必须声明标量变量 - 参数错误
【发布时间】:2017-03-07 02:44:21
【问题描述】:

我有一个如下的数据集查询:

SELECT col1, col2
FROM Table
WHERE @DatabaseGrowth = 'DatabaseGrowthByLast7Days'

UNION ALL

SELECT col3, col4
FROM Table
WHERE @DatabaseGrowth = 'DatabaseGrowthByLast4Weeks'

并有一个名为DatabaseGrowth 的参数。在运行报告时,如果我选择DatabaseGrowthByLast7Days,它应该返回7Days。但是,它显示错误

必须声明标量变量“@DatabaseGrowth”

我的数据集代码有什么问题? 以上代码是我实际代码的示例代码。

修改了上面的代码。

【问题讨论】:

  • 显示你是如何声明的? SQL参数应该这样声明Declare @DatabaseGrowth varchar(500)
  • 我在不同的地方使用不同的参数时不需要声明。 Select.....From table ...Where ColumnName in (@param)。它在没有声明的情况下工作。
  • 当你在SQL SERVER中使用@variablename时,应该在使用前声明
  • 因为这是一个 SQL Server Reporting Services 问题,所以告诉您声明变量的答案没有抓住重点;如果您正确配置 SSRS 报告,则 SSRS 会配置参数。这是你想做的吗? technet.microsoft.com/en-us/library/aa337400(v=sql.105).aspx?

标签: sql-server reporting-services


【解决方案1】:
declare @DatabaseGrowth varchar(500)= 'DatabaseGrowthByLast4Weeks'
SELECT '7Days' as val
WHERE @DatabaseGrowth = 'DatabaseGrowthByLast7Days'

UNION ALL

SELECT '4Weeks' as val
WHERE @DatabaseGrowth = 'DatabaseGrowthByLast4Weeks'

【讨论】:

  • 添加declare @DatabaseGrowth nvarchar(max)= 'DatabaseGrowthByLast7Days'后,即使选择DatabaseGrowthByLast4Weeks,它也会给我7Days的结果。
  • 我编辑了我的答案你可以检查一次@pkawar
【解决方案2】:

首先你需要声明一个变量@DatabaseGrowth。然后可以使用CASE 表达式:

评估条件列表并返回多个可能的结果表达式之一。

DECLARE @DatabaseGrowth nvarchar(max) = 'DatabaseGrowthByLast7Days'

SELECT CASE WHEN @DatabaseGrowth = 'DatabaseGrowthByLast4Weeks' THEN '4Weeks' 
            WHEN @DatabaseGrowth = 'DatabaseGrowthByLast7Days' THEN '7Days'  
            ELSE NULL END as val

或者:

SELECT CASE @DatabaseGrowth  
            WHEN 'DatabaseGrowthByLast4Weeks' THEN '4Weeks' 
            WHEN 'DatabaseGrowthByLast7Days' THEN '7Days'  
            ELSE NULL END as val

编辑

根据您的编辑:

DECLARE @DatabaseGrowth nvarchar(max) = 'DatabaseGrowthByLast4Weeks'

SELECT  [Col1], 
        [Col2]
FROM [Table]
WHERE @DatabaseGrowth = 'DatabaseGrowthByLast7Days'
UNION ALL
SELECT  [Col3], 
        [Col4]
FROM [Table]
WHERE @DatabaseGrowth = 'DatabaseGrowthByLast4Weeks'

请注意,[Col1] 的数据类型应与 [Col3] 相同,[Col2] 应与 [Col4] 相同。

【讨论】:

  • 我有一个很长的选择列表,数据将根据选择的参数进行过滤(比如如果我选择DatabaseGrowthByLast7Days,UNION ALL 之后的第二部分将被忽略)。因此,我需要检查 WHERE 子句。
  • 然后呢?你可以使用WHERE some_column = CASE... etc
【解决方案3】:

试试下面的方法,如果你在 SSRS 数据集中使用它,不需要声明它。如果您删除现有参数并将以下代码添加到数据集。它会自动创建一个名为DatabaseGrowth的参数。

SELECT col1, col2
FROM Table
WHERE 'DatabaseGrowthByLast7Days' = (@DatabaseGrowth)

UNION ALL

SELECT col3, col4
FROM Table
WHERE 'DatabaseGrowthByLast4Weeks' = (@DatabaseGrowth)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多