如何更改为SSRS报告执行的SQL

时间:2014-12-10 20:47:25

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

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

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

任何人都可以帮助我理解为什么在执行报告时交换机不起作用?这是我正在使用的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:

2 个答案:

答案 0 :(得分:0)

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

同样避免使用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

答案 1 :(得分:0)

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

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

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