Ssrs 2008 查询在SSMS中执行,但会崩溃

Ssrs 2008 查询在SSMS中执行,但会崩溃,ssrs-2008,reporting-services,Ssrs 2008,Reporting Services,我有以下查询,它在SSMS中完美地执行。然而,当我将代码粘贴到一个新创建的数据集中并单击“执行”时,出价崩溃并关闭,而没有通知-有没有关于原因的建议 代码: 我会尝试创建一个视图,看看它是否仍然崩溃。BIDS并不意味着SSM,它对XML解析的解释可能会把它搞砸。您正在使用“for xml”和“type”转换查询中的值,其中“type”去掉了xml的根元素,然后扩展它,然后嵌套它,然后嵌套它,然后左键连接它,这样您就有了一个正则sql表达式。根据我的经验,BIDS并不意味着要做很多动态SQL、密集

我有以下查询,它在SSMS中完美地执行。然而,当我将代码粘贴到一个新创建的数据集中并单击“执行”时,出价崩溃并关闭,而没有通知-有没有关于原因的建议

代码:


我会尝试创建一个视图,看看它是否仍然崩溃。BIDS并不意味着SSM,它对XML解析的解释可能会把它搞砸。您正在使用“for xml”和“type”转换查询中的值,其中“type”去掉了xml的根元素,然后扩展它,然后嵌套它,然后嵌套它,然后左键连接它,这样您就有了一个正则sql表达式。根据我的经验,BIDS并不意味着要做很多动态SQL、密集CLR和xml节点或xquery表达式嵌套的事情。每次我抛出大量的XML、表变量、递归CTE、动态SQL。。。它爆炸了。我猜它的解释器爆炸了,因为它没有SSMS用来计算表达式的资源,所以以爆炸的形式放弃了

我的想法是,执行视图时,解释将被强制在数据库中的SQL引擎上执行其逻辑和执行计划,然后返回结果。投标方只需知道这是一个执行调用,而不必推理出逻辑。在我的记忆中,2008年投标的SSRS在复杂的查询逻辑和SSAS多维数据集方面存在许多问题


这可能不起作用,但我知道,将内容放入视图、函数或进程通常会解决引擎必须执行的复杂逻辑问题。

我通过将代码粘贴到数据集中,更新字段,而不是单击“查询设计器”来解决这一问题通过手动添加参数,BIDS不会自动检测(在我的例子中,DATEADD()的INT参数)。然后,当我关闭数据集窗口并在报告中使用数据集时,一切正常

谢谢您的回答。我设法解决了这个问题,只需将代码粘贴到数据集中,而不是单击“查询设计器”,并手动添加BIDS未自动检测到的参数(在我的示例中,DATEADD()的INT参数)
SELECT  MSP_EpmProject_UserView.ProjectOwnerName,
        MSP_EpmProject_UserView.ProjectUID,
        CurrentActivities.Activities_Current
FROM    MSP_EpmProject_UserView 
        Left Join
            (Select t1.projectUID, STUFF(
                (Select ', ' + t2.TaskName
                From (SELECT   MSP_EpmProject_UserView.ProjectUID, MSP_EpmTask_UserView.TaskName
                    FROM MSP_EpmAssignmentByDay_UserView INNER JOIN MSP_EpmTask_UserView ON MSP_EpmAssignmentByDay_UserView.TaskUID = MSP_EpmTask_UserView.TaskUID INNER JOIN MSP_EpmProject_UserView on MSP_EpmAssignmentByDay_UserView.ProjectUID = MSP_EpmProject_UserView.ProjectUID
                    WHERE (MSP_EpmAssignmentByDay_UserView.TimeByDay = @refDate) AND MSP_EpmProject_UserView.[Project Departments] = @prjDep) t2
                Where t1.ProjectUID = t2.ProjectUID
                Order by t2.TaskName
                For XML Path(''), Type).value('.','varchar(max)'),1,2,'') as Activities_Current
            From
                (SELECT   MSP_EpmProject_UserView.ProjectUID, MSP_EpmTask_UserView.TaskName
                FROM MSP_EpmAssignmentByDay_UserView INNER JOIN MSP_EpmTask_UserView ON MSP_EpmAssignmentByDay_UserView.TaskUID = MSP_EpmTask_UserView.TaskUID INNER JOIN MSP_EpmProject_UserView on MSP_EpmAssignmentByDay_UserView.ProjectUID = MSP_EpmProject_UserView.ProjectUID
                WHERE (MSP_EpmAssignmentByDay_UserView.TimeByDay = @refDate) AND MSP_EpmProject_UserView.[Project Departments] = @prjDep) t1
            Group by t1.ProjectUID) CurrentActivities On CurrentActivities.ProjectUID = MSP_EpmProject_UserView.ProjectUID
WHERE   (MSP_EpmProject_UserView.[Project Departments] = @prjDep)