CREATE PROCEDURE [dbo].[GetNewsletterStories] @NewsletterID int,@IsMainStory int=2 --2 is both,1 is true,0 is false AS BEGIN SET NOCOUNT ON; SELECT ns.SortOrder as SortOrder,ns.Title,ns.Description,ns.LinkText,ns.LinkURL,ns.PictureName,ns.IsMainStory FROM NewsletterStory ns INNER JOIN Newsletter n ON n.NewsletterID = ns.NewsletterID WHERE n.Deleted=0 AND ns.Deleted=0 AND n.NewsletterID = @NewsletterID --do they want non main story or main story or both AND ((ns.IsMainStory = 0 AND @IsMainStory=0) OR (ns.IsMainStory = 1 AND @IsMainStory=1) OR (@IsMainStory=2)) ORDER BY ns.SortOrder END
如果我从Management Studio中运行存储过程,如下所示:
USE [MyDB] GO DECLARE @return_value int EXEC @return_value = [dbo].[GetNewsletterStories] @NewsletterID = 1,@IsMainStory = 1 SELECT 'Return Value' = @return_value GO
我按正确的顺序得到了我需要的东西:
然后我在SSRS中创建我的数据集,可以转到查询设计器并运行它:
这是它提示我参数的地方:
我得到了我所需要的:
到目前为止,我添加了tablix并设置了我创建的数据集名称,甚至根据我的数据集中的列将排序部分设置为[SortOrder]:
每次运行报表时,我都会得到错误的排序顺序:
简单的我认为,它必须缓存一些旧版本,所以我确保删除我的报告MyReport.rdl.data文件,以便我得到一个新的报告.不过,它仍然首先显示“Concerto Integration”,然后是“RIMS Newsletter”……但我的数据集和我的存储过程正在返回正确的顺序“RIMS Newsletter”和“Concerto Integration”.我已经尝试了所有的东西,但似乎总是按表格的主键排序(文章创建时,因为我在RIMS时事通讯文章之前创建了Concerto Integration文章).
我不知道在哪里看,我甚至检查了结果XML(视图代码功能),SortOrder在数据集中.即使我删除了SortOrder它也应该工作,因为存储过程已经按照你在代码中看到的那样进行排序.
是什么赋予了?
解决方法
无论如何我改变它,以便XML读取这个:
<SortExpressions> <SortExpression> <Value>=Fields!SortOrder.Value</Value> </SortExpression> </SortExpressions>
保存了我的报告并再次运行,瞧,一切都很好.经验教训使用“查看代码”选项的先前经验来解决此类问题.
这是整个事情:
<TablixMembers> <TablixMember> <Group Name="Title"> <GroupExpressions> <GroupExpression>=Fields!Title.Value</GroupExpression> </GroupExpressions> </Group> <SortExpressions> <SortExpression> <Value>=Fields!SortOrder.Value</Value> </SortExpression> </SortExpressions> <TablixMembers> <TablixMember> <Group Name="Details2" /> <TablixMembers> <TablixMember /> <TablixMember /> <TablixMember /> </TablixMembers> </TablixMember> </TablixMembers> </TablixMember> </TablixMembers>
无论我在设计器中做了什么都不会更新sortexpression值部分,这部分:
<SortExpressions> <SortExpression> <Value>=Fields!SortOrder.Value</Value> </SortExpression> </SortExpressions>
我尝试了设计器,但它从未更新过XML,运行报告产生了错误的结果.直到我手动更改SortExpression才能读取Fields!SortOrder.Value才能正确排序我的报告.
这是评论中提到的屏幕截图:
更好的照片:
即使我在标题级别同样的问题: