[英]How do I change the SQL executed for an SSRS report
我将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:
创建一个过程并使用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
我才意识到问题出在哪里。 最初,我将使用union语句,其中第二条语句已过滤并与第一条合并。
更改方法时,我忘记为第二条语句使用别名。 这就是SSRS结果集为空的原因。
阿里先生,谢谢您的贡献。 我会根据您的反馈进行适当的更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.