【问题标题】:How do I change the SQL executed for an SSRS report如何更改为 SSRS 报告执行的 SQL
【发布时间】:2015-02-09 05:01:10
【问题描述】:

我正在使用带有 SSRS 2010 的 SQL Server 2008R2。我正在测试一个使用 if 语句在两个简单 SQL 语句之一的执行之间切换的存储过程。我的最终目标是用存储过程替换嵌入在多个 SSRS 报告中的 SQL,这些存储过程根据日期参数选择要运行的语句。

我在 SSMS 中测试了该语句,它在语句之间切换并产生没有问题的结果。但是,在 SSRS 中,当我执行报告并测试第二条语句时,除了计算文本列之外,我的结果集为空。如果我从 SSRS 查询设计器运行相同的过程,则执行的语句之间的切换有效

谁能帮我理解为什么在执行报告时开关不起作用?这是我正在使用的 SQL:

begin
if @reportdate >='10/1/2014' goto convformat
if @reportdate <'10/1/2014' goto preconvformat
end

preconvformat:

SELECT TOP (1000) col1
    ,col2
    ,col3
    ,col4
    ,col5
    ,col6
    ,col7
    ,'t1' AS OriginalDataSource
FROM t1 AS arh WITH (NOLOCK)
LEFT JOIN t1a1 a WITH (NOLOCK)
    ON a.col1 = arh.col1
WHERE (arh.DateCreated < '1/1/2015')
and a.col2 = '12345678'

goto testend    

convformat:

SELECT TOP 1000 arcus.col1
    ,col2
    ,col3
    ,col4
    ,col5
    ,col6
    ,col7
    ,'t3' AS OriginalDataSource
FROM t3. rmrtrk WITH (NOLOCK)
LEFT JOIN t3t1 arcus WITH (NOLOCK)
    ON arcus.col1 = rmrtrk.col1

where customer_number = '12345678'

testend:

【问题讨论】:

  • 我在数据集定义中未指定数据库+架构时遇到了这个问题。
  • 对我来说这个日期似乎有点可疑'10/1/2014',尝试使用 ANSI 日期,即YYYYMMDD

标签: sql sql-server tsql reporting-services ssms


【解决方案1】:

创建一个过程并使用 ANSI 日期格式来比较传递的日期值..

同时避免使用GOTO,在较大的代码段中很难调试。使用IF..ELSE 构造。

CREATE PROCEDURE Test_Proc 
 @reportdate  DATE 
AS
BEGIN
  SET NOCOUNT ON;

  IF (@reportdate >= '20141001')  --<-- ANSI Date Format  YYYYMMDD
   BEGIN
     -- 1st Statement 
   END
  ELSE
   BEGIN
    -- 2nd Statement 
   END

END

【讨论】:

    【解决方案2】:

    我刚刚意识到问题所在。最初,我打算使用联合语句,其中第二个语句被过滤并与第一个语句合并。

    当我改变方法时,我忘记在第二条语句中使用别名。这就是 SSRS 结果集为空的原因。

    M.阿里,谢谢你的贡献。我会根据您的反馈做出适当的更改。

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多