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