我有一个包含多个参数的存储过程。其中大多数允许在下拉菜单中进行多项选择。它们是: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
答案 0 :(得分:1)
您使用存储过程是否有原因?可以执行您想要的操作,但SQL Server本身不支持在单个参数上传递多个值。如果你想这样做,你必须做一些破解,从SQL的外观来看,你已经解决了一个问题。
如果您将查询嵌入到rdl文件中,您可以简单地使用IN
子句(即IN(@vOwner)
),并且SSRS会以适当的方式将值插入查询中,使其具有预期的行为。通过这种方式,您可以依靠专门设计的工作,而不必解决已知限制。
答案 1 :(得分:0)
看起来它根本不是SSRS的缺陷。在SSMS中进行了更多的测试之后,我发现只有最终被切断的所有者价值。我将@vOwner参数从varchar(1000)增加到varchar(2000),现在工作正常。我只是将太多字符传递给该参数并且它被截断了。问题解决了。感谢billinkc为那个灯泡!