【问题标题】:SSRS 2005 - Omitting RecordsSSRS 2005 - 省略记录
【发布时间】:2011-09-02 23:40:25
【问题描述】:

我有一个包含多个参数的存储过程。它们中的大多数允许在下拉菜单中进行多项选择。它们是:vOwner、vFunction、vSite、vStatus(允许所有多项选择并且“全选”也已启用),然后是 vStartDate 和 vEndDate。

由于某种原因,当我为每个参数选择“全选”时,SSRS 会切断一些记录。除了最后一个“所有者”的记录之外,它似乎报告了所有内容。我正在寻找关于为什么会发生这种情况的线索。当我只选择一个日期的数据时,就会发生这种情况。就好像最后一个所有者甚至没有被选为数据集的一部分。

就 SSRS 而言,设置相当简单。我有一个引用存储过程(如下)的数据集,以及我拥有的每个查找表(函数、状态等)的数据集。任何帮助表示赞赏。让我知道是否需要其他信息。谢谢!

存储过程:

@vOwner varchar(1000) = NULL, 
@vFunction varchar(1000) = NULL, 
@vStatus varchar(1000) = NULL,
@vLocation varchar(1000) = NULL,
@vBeginDate datetime = NULL,
@vEndDate datetime = NULL

AS

BEGIN


    --Allow for multiple owners, functions, etc. to be selected in SSRS.
    Select @vOwner = ', ' + @vOwner + ', '
    create table #Owner
    (
    Owner varchar(1000)
    )

    Insert Into #Owner 
    Select  ManagerLastName + ', ' + ManagerFirstName As Owner
    From Managers 
    Where  @vOwner Like  '%, ' + ManagerLastName + ', ' + ManagerFirstName + ', %'
    Group By ManagerLastName, ManagerFirstName

    --Function
    Select @vFunction = ', ' + @vFunction + ', '
    create table #Function
    (
    Functions varchar(1000)
    )

    Insert Into #Function
    Select  Functions
    From Functions 
    Where  @vFunction Like  '%, ' + Functions + ', %'
    Group By Functions

    --Status
    Select @vStatus = ', ' + @vStatus + ', '
    create table #Status
    (
    IssueStatus varchar(1000)
    )

    Insert Into #Status
    Select  IssueStatus
    From IssueStatus 
    Where  @vStatus Like  '%, ' + IssueStatus + ', %'
    Group By IssueStatus

    --Sites
    Select @vLocation = ', ' + @vLocation + ', '
    create table #Sites
    (
    siteName varchar(1000)
    )

    Insert Into #Sites 
    Select  siteName
    From Sites  
    Where  @vLocation Like  '%, ' + siteName + ', %'
    Group By siteName


    Select 
    recID,
    siteName
    functions

    From issueInput

    Where 
    @vFunction Like  '%, ' + functions + ', %'
    And @vOwner Like  '%, ' + ManagerLastName + ', ' + ManagerFirstName + ', %' 
    And @vStatus Like  '%, ' +  IssueStatus + ', %'
    And @vLocation Like  '%, ' +  SiteName + ', %'
    And (@vBeginDate Is Null Or @vBeginDate = 0 Or @vBeginDate <= Cast(Convert(varchar,(OpenDate),101) As datetime))
    And (@vEndDate Is Null Or @vEndDate = 0 Or @vEndDate >= Cast(Convert(varchar,(OpenDate),101) As datetime))

    Order by OpenDate

END

【问题讨论】:

  • 您确定是 SSRS 切断了结果而不是查询的缺陷吗?我不太关注它,但你应该能够从 SSMS 向它传递相同的参数(全选)并验证它是否返回了预期的结果。

标签: reportingservices-2005


【解决方案1】:

您使用存储过程有什么原因吗?可以做你想做的事,但是 SQL Server 本身并不支持在单个参数上传递多个值。如果你想这样做,你必须做一些修改,从你的 SQL 的外观来看,你已经解决了。

如果您将查询嵌入到 rdl 文件中,您可以简单地使用 IN 子句(即 IN(@vOwner)),SSRS 将以适当的方式将值插入查询中,使其具有预期的行为。这样,您就可以依赖旨在工作的东西,而不必绕过已知的限制。

【讨论】:

    【解决方案2】:

    看起来这根本不是 SSRS 中的缺陷。在 SSMS 中对其进行了更多测试后,我发现最终被切断的只是所有者价值。我将 @vOwner 参数从 varchar(1000) 增加到 varchar(2000) 并且现在工作正常。我只是将太多字符传递给该参数并且它被截断了。问题解决了。感谢 billinkc 的灯泡!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多