0

我有以下查询,它在 SSMS 中完美执行。但是,当我将代码粘贴到新创建的数据集并单击“执行”时,BIDS 崩溃并在没有通知的情况下关闭 - 关于原因的任何建议?

代码:

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)
4

2 回答 2

0

我会尝试创建一个视图,看看它是否仍然崩溃。BIDS 并不意味着是 SSMS,它对 XML 解析的解释可能会把它搞砸。您正在使用“for xml”翻译查询中的值,使用“type”删除 xml 的根元素,然后扩展它,然后嵌套它,然后嵌套它,然后左连接它,然后你有一个常规sql表达式。根据我的经验,BIDS 并不意味着要做很多动态 SQL、密集的 CLR 和 xml 节点或 xquery 表达式嵌套的东西。每次我抛出大量的 XML、表变量、递归 CTE、动态 SQL ......它都会爆炸。我猜它的解释器正在爆炸,因为它没有 SSMS 评估表达式的资源并以爆炸的形式放弃。

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

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

于 2013-01-25T22:20:56.887 回答
0

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

于 2013-01-26T18:19:52.527 回答