【问题标题】:SSRS 2005 - Capturing RAISERROR messageSSRS 2005 - 捕获 RAISERROR 消息
【发布时间】:2009-07-21 16:20:09
【问题描述】:

我正在检查用户是否有权通过数据集存储过程查看报表,如果用户没有,则调用 raiserror。

当存储过程(填充报表数据集)引发错误(通过 RAISERROR)而不是返回数据时,有没有办法显示与 SQL Server Reports 2005 不同的消息?

这里是数据集存储过程的骨架代码

create procedure ReportSprocName
    @ClientID   int,
    @Login      sysname
as
begin
    --; check user's permission through @Login
    --; * Pseudo code *
    if @Login does not have permission begin
        raiserror(@Login does not have permission, 127, 1)
        return
    end

    select  id, name, etc...
    from    someTable   
end
GO

我对两种可能的解决方案感兴趣

  1. 在 RAISERROR 中显示错误消息
  2. 在 SSRS 报告本身中显示硬编码的自定义消息

目前这是 SSRS 报告显示的默认消息

【问题讨论】:

  • 我找到了解决方法,但我仍然很想知道如何从 SQL Server 报告中捕获 RAISERROR 消息。

标签: sql-server sql-server-2005 reporting-services error-handling


【解决方案1】:

如果用户没有查看报告的权限,您为什么要允许他们触发报告?

在 SSRS 报告本身中显示自定义消息:

  1. 添加文本字段
  2. 自定义其上显示的文本,让您满意
  3. 为可见性 > 隐藏值(属性窗口)提供表达式。即:

    = iif(count(Fields!Application_Number.Value, "YOUR-DATASOURCE-NAME") > 0, true, false)

【讨论】:

  • @rexem:“如果用户没有查看报告的权限,你为什么要允许他们触发报告”这是一个有效的问题。我已经询问了创建菜单的开发人员,但没有办法“暂时”关联菜单项的权限,但我仍然需要完成一些事情,这就是为什么我正在寻找“解决方法”来现在就做点事情吧。
  • 抱歉,我不必在报告中捕获 RAISERROR 输出。
  • 您可以尝试在示例中的 RETURN 子句中定义一个结果集,但我想这些列需要与成功运行时报告产生的内容相匹配。
  • 或者您可以在存储过程中添加一列以填充权限检查的值 - 这将使您能够触发自定义消息。并非结果集中的所有列都需要向用户显示。
  • @rexem:我所做的是,我添加了另一个数据源,它只是返回一个值,无论用户是否有权限。我没有添加新的文本字段,而是在表的“NoRows”属性上添加了一个新表达式。 --> =iif(First(Fields!HasPermission.Value, "permissionDataSet") = 0, "您没有查看此报告的权限", "没有为此客户生成认证标签") 我没有标记您的回答为答案但投了赞成票,因为我仍然有兴趣从 SQL Server 报告中捕获 RAISERROR 值。感谢您的建议。
猜你喜欢
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
相关资源
最近更新 更多