【问题标题】:SSRS Dataset Parameter on an REDSHIFT ODBC ConnectionREDSHIFT ODBC 连接上的 SSRS 数据集参数
【发布时间】:2021-02-25 00:45:26
【问题描述】:

我目前正在尝试使用 SSRS 通过 ODBC 运行红移报告。

我预计查询会在 SQL 有效时运行,但是看起来 SSRS 正在将参数名称传递回 SQL 查询,而不是像 id 期望的那样将参数值传递回 Redshift 请考虑以下查询。

SELECT x.Col_1, y.Col_2, x.Col_3, x.Col_4 
From x_table as x
JOIN Y_table as y on x.Col_4 = y.Col_4
WHERE x.Col_4 = @Col_4 
  AND x.col_3 >= @From and x.col_3 < @To
  AND x.col_2 >= @From and x.col_2 < @To

在 SSRS 中,当我尝试刷新字段列表时出现以下错误,

ERROR [42702] [Amazon][Amazon Redshift] (30) 尝试执行查询时出错:[SQLState 42702] 错误:列引用“From”不明确

此查询使用参数查询数据库以仅返回数据的子集,具体取决于特定客户和分类字段我无法将过滤器移出报告。

故障排除步骤

  1. 在 redshift 上运行此查询并删除参数时,它可以正常工作。
  2. 在带有参数的 SQL Server 上运行此查询时,它工作正常。
  3. 使用 ? 运行此查询时作为参数名称,它仅适用于第一个参数。
  4. 使用列定义以外的参数运行此查询时,它仍然会失败并出现类似错误

研究这似乎是 ODBC 数据源的一个常见问题,但在不使用多个参数的情况下,大多数人似乎只使用 ?但这只适用于单个参数。

我发现了两个类似的堆栈溢出,但都没有帮助我解决这个变化。

我怀疑 ODBC 数据集需要某种转义或类似的形式,以便 SSRS 可以将参数名称替换为值,但我无法在任何地方找到此文档,因为如果使用 ?由于参数名称有效,那么肯定只是使用某种转义的问题。

【问题讨论】:

  • 您应该能够使用 ? 对多个参数进行转义,并且它们将按照从报告中填充参数的相同顺序填充。例如:如果您有Where x.Col_4 = @Col_4 and x.col_3 = @Col_3 ,则将其替换为Where x.col_3 = ? AND x.Col_4 = ? ,如果@col_3 在@col_4 之前填充。这对你来说不成功吗?
  • 它不起作用,因为在实际查询中我需要多次引用参数以进行日期时间查找
  • 我已经针对该案例修改了示例 SQL
  • 啊,在这种情况下,您可以在 SELECT 语句之前抛出一个DECLARE @from DATETIME = ? 吗?我在 SSIS 和 SSRS 中都这样做了,以便在 Select 本身之前操作参数。这将使您能够以正确的顺序保留参数,并且 ODBC 不会尝试从参数输入中解析 @col_3,但希望能够处理您为它明确布置的 @from。
  • 调用列或变量'From'是自找麻烦!

标签: sql sql-server reporting-services odbc amazon-redshift


【解决方案1】:

以防万一其他人遇到这个问题,我最终通过使用链接服务器和 OPENQUERY 解决了这个问题,这实际上是一个非常理想的解决方案,因为它使您能够将 PGSQL 写入报告中,如果您在技术上需要您甚至可以进行后续连接SQL Server 数据。

DECLARE @OPENQUERY nvarchar(4000), @PGSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = 'Redshift'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @PGSQL = 'SELECT x.Col_1, y.Col_2, x.Col_3, x.Col_4 
From x_table as x
JOIN Y_table as y on x.Col_4 = y.Col_4
WHERE x.Col_4 = '''''+ @Col_4 +'''''
AND x.col_3 >= '''''+ @From +''''' and x.col_3 < '''''+ @To +'''''
AND x.col_2 >= '''''+ @From+ ''''' and x.col_2 < '''''+ @To +''''''
EXEC (@OPENQUERY+@PGSQL)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 2017-08-13
    相关资源
    最近更新 更多