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 年の SSRS with BIDS には、複雑なクエリ ロジックと SSAS キューブに関する多くの問題があります。

これはうまくいかないかもしれませんが、ビュー、関数、またはプロシージャに何かを配置すると、エンジンが実行しなければならない複雑なロジックの問題を解決できることがよくあります。

于 2013-01-25T22:20:56.887 に答える
0

コードをデータセットに貼り付け、フィールドを更新し、「クエリデザイナー」をクリックせず、BIDSが自動的に検出しなかったパラメータを手動で追加することで、これを回避することができました(私の場合、DATEADD()のINTパラメータ) )。その後、データセット ウィンドウを閉じてレポートでデータセットを使用すると、すべて正常に動作します

于 2013-01-26T18:19:52.527 に答える