You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:错误信息嵌入报表页面展示(交互更友好)

如果不想弹出系统错误框,想把提示直接展示在报表页面内,可以用输出参数传值的方式,不会中断报表执行:

  1. 给存储过程新增一个输出参数,用来传递错误信息,校验不通过时给参数赋值,同时返回和正常查询结构一致的空结果集,避免数据集字段加载失败:
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
  1. 在SSRS的数据集配置中,给@ErrMsg参数勾选参数为输出参数选项。
  2. 在报表页面拖入一个文本框作为错误提示区:
    • 文本框值绑定表达式:=Parameters!ErrMsg.Value
    • 文本框可见性设置表达式:=Iif(IsNothing(Parameters!ErrMsg.Value), True, False)
    • 可以按需给文本框设置红色字体、浅红背景等警告样式,触发校验时提示会直接展示在报表页面内,不会弹出系统对话框。

内容的提问来源于stack exchange,提问作者user14621282

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:45:38