我有一个Crystal Report(使用CR 2008),它有三个数据库查询(以下内容来自" Show SQL"菜单选项)
MYSERVER
"mydb"."dbo"."run_report";1 {d '2000-01-01'}, {d '2015-01-01'}, 'A12345'
MYSERVER
select SUser_SName() as [CurrentUser]
MYSERVER
select parent_name from containers where id = '{?@id}'
这些查询都不依赖于彼此,尽管第一个和最后一个查询使用相同的输入参数 - @id
(在此示例中为A12345
)
当run_report
存储过程返回>时,上述工作正常。 0结果。当它没有返回任何结果时(但据我所知没有实际错误),第二个和第三个SQL查询似乎不会被执行,因为它们的结果(作为字段插入到报告中)只是空白。
我可以看到两种可能的解决方法:
......但我不确定如何实现这两种方法。
答案 0 :(得分:1)
我在SAP论坛上交叉发布并获得了this answer。
有两种可能的解决方案
当没有实际结果时,使存储过程返回所有NULL值的单行。
将报告拆分为一个主报告和两个子报告。存储过程在主报表中运行,其他每个查询都在其自己的子报表中运行
我使用了解决方案#1(因为在我的情况下工作较少)并且工作正常。我将我的存储过程更改为SELECT INTO,结果被放入临时表中。然后我可以去:
-- Do the main SELECT INTO query first, then...
-- Check if temporary table is empty
IF NOT EXISTS (SELECT TOP 1 Id FROM #report WHERE Id IS NOT NULL)
BEGIN
-- If the source table you SELECTed from had NOT NULL columns,
-- you'll need to alter them prior to inserting your row of NULLS
ALTER TABLE #report ALTER COLUMN Name VARCHAR(255) NULL
-- Rinse and repeat for other affected columns
-- Then insert the row of NULLS
INSERT INTO #report VALUES(NULL, NULL, NULL, NULL, NULL, NULL)
END
-- Return the contents of the report
SELECT * FROM #report