SSRS 2005 - 省略记录

时间:2011-05-26 21:53:40

标签: reportingservices-2005

我有一个包含多个参数的存储过程。其中大多数允许在下拉菜单中进行多项选择。它们是: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

2 个答案:

答案 0 :(得分:1)

您使用存储过程是否有原因?可以执行您想要的操作,但SQL Server本身不支持在单个参数上传递多个值。如果你想这样做,你必须做一些破解,从SQL的外观来看,你已经解决了一个问题。

如果您将查询嵌入到rdl文件中,您可以简单地使用IN子句(即IN(@vOwner)),并且SSRS会以适当的方式将值插入查询中,使其具有预期的行为。通过这种方式,您可以依靠专门设计的工作,而不必解决已知限制。

答案 1 :(得分:0)

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