如何在SSRS Report中展示存储过程print输出的错误提示信息
实现方法
首先明确:SSRS默认不会捕获存储过程中PRINT输出的消息,这类信息属于SQL Server返回的信息级消息流,不会传递到报表渲染层,你可以按以下两种方案任选其一改造:
方案1:直接抛出可被SSRS识别的错误(改造量最小)
把存储过程里的PRINT语句替换为级别16的错误抛出语句即可,SSRS会自动捕获级别16及以上的执行错误,触发时直接弹出提示框展示错误文本。
修改存储过程的校验逻辑:
-- 原有校验逻辑 IF @StartDate < @EndDate BEGIN -- 删掉原有的PRINT语句,替换为以下两种写法二选一 -- 兼容所有SQL Server版本的写法 RAISERROR(N'The start date is less than the end date', 16, 1) -- SQL Server 2012及以上版本更推荐的写法 -- THROW 51000, N'The start date is less than the end date', 1; RETURN -- 终止后续存储过程逻辑执行 END
注意:错误级别必须设为16,级别低于16的消息属于提示/警告类信息,SSRS不会判定为执行错误,不会捕获展示。
这个方案不需要额外修改SSRS报表配置,触发校验时会自动弹出系统错误框展示你写的提示文本。
方案2:错误信息嵌入报表页面展示(交互更友好)
如果不想弹出系统错误框,想把提示直接展示在报表页面内,可以用输出参数传值的方式,不会中断报表执行:
- 给存储过程新增一个输出参数,用来传递错误信息,校验不通过时给参数赋值,同时返回和正常查询结构一致的空结果集,避免数据集字段加载失败:
CREATE PROCEDURE YourProcedureName @StartDate DATE, @EndDate DATE, @ErrMsg NVARCHAR(200) OUTPUT -- 新增的错误输出参数 AS BEGIN SET NOCOUNT ON; -- 日期校验逻辑 IF @StartDate < @EndDate BEGIN SET @ErrMsg = N'The start date is less than the end date' -- 返回和正常查询字段完全一致的空结果集 SELECT CONVERT(DATE, NULL) AS [DimensionDate], CONVERT(DECIMAL(18,2), NULL) AS [MetricValue] WHERE 1 = 0 RETURN END -- 校验通过时清空错误参数,执行正常查询逻辑 SET @ErrMsg = NULL SELECT [DimensionDate], [MetricValue] FROM YourBusinessTable END
- 在SSRS的数据集配置中,给
@ErrMsg参数勾选参数为输出参数选项。 - 在报表页面拖入一个文本框作为错误提示区:
- 文本框值绑定表达式:
=Parameters!ErrMsg.Value - 文本框可见性设置表达式:
=Iif(IsNothing(Parameters!ErrMsg.Value), True, False) - 可以按需给文本框设置红色字体、浅红背景等警告样式,触发校验时提示会直接展示在报表页面内,不会弹出系统对话框。
- 文本框值绑定表达式:
内容的提问来源于stack exchange,提问作者user14621282
相关产品推荐
相关产品推荐

