0

ASP.NET 4 を使用した Visual Studio 2010 で、いくつかのテーブルを結合して、結果をグリッドビューと詳細ビューに sqldatasource で表示しようとしています。sqldatasource ウィザードで、カスタム SQL ステートメントまたはストアド プロシージャを指定することを選択し、クエリ ビルダーで JOIN などの複雑なクエリを定義することを選択し、SQL ステートメントを生成して、問題のテーブルを他のテーブルの特定の列と結合しようとしました。しかし、クエリをテストしようとすると、「varchar でメソッドを呼び出せません」というエラー メッセージが表示されます。私はSQLステートメントに慣れていないので、ステートメントの何が問題なのかアドバイスしてください。以下は、生成されたSQLステートメントです

 SELECT Problem.ProblemID, Problem.CustomerID, Problem.Summary, 
        Problem.DateLogged, Problem.DateUpdated, Status.Status, Priority.Priority, 
        Technician.Name, Technician.Surname, [Skill Group].[Skill Group], 
        HelpdeskOperator.Name AS Expr1,
        HelpdeskOperator.Surname AS Expr2, Problem.NoteID, Problem.ResolutionID 

 FROM Problem 
INNER JOIN Status ON Problem.StatusID = Status.Status.StatusID 

    INNER JOIN HelpdeskOperator ON 
    Problem.HelpdeskID = HelpdeskOperator.HelpdeskID AND Status.StatusID = HelpdeskOperator.StatusID 

    INNER JOIN Priority ON Problem.PriorityID = Priority.PriorityID 

    INNER JOIN [Skill Group] ON Problem.SkillGroupID = [Skill Group].SkillGroupID 

    INNER JOIN Technician ON Problem.ProblemID = Technician.ProblemID 
    AND Status.StatusID = Technician.StatusID AND
     Priority.PriorityID = Technician.PriorityID 
    AND [Skill Group].SkillGroupID = Technician.SkillGroupID

前もって感謝します

4

1 に答える 1

0

クエリを修正しました:

SELECT p.ProblemID, p.CustomerID, p.Summary, p.DateLogged, p.DateUpdated, s.Status, pr.Priority, t.Name, t.Surname,
       sg.* , ho.Name AS Expr1, ho.Surname AS Expr2, p.NoteID, p.ResolutionID
FROM Problem p
INNER JOIN Status s ON p.StatusID = s.StatusID
INNER JOIN HelpdeskOperator ho ON p.HelpdeskID = ho.HelpdeskID AND s.StatusID = ho.StatusID
INNER JOIN Priority pr ON p.PriorityID = pr.PriorityID
INNER JOIN [Skill Group] sg ON p.SkillGroupID = sg.SkillGroupID
INNER JOIN Technician t ON p.ProblemID = t.ProblemID AND s.StatusID = t.StatusID AND pr.PriorityID = t.PriorityID
                         AND sg.SkillGroupID = t.SkillGroupID
  1. 結合句に重複したテーブル識別子がありましたStatus.Status.StatusID
  2. Skill Groupテーブルに列が含まれているとは思えない[Skill Group]ので、すべての値を返すように変更しましたSkill Group

それらはエラーだったと思います。そうでない場合は、クエリとテーブル構造に関する詳細情報が必要になります。

編集:

まず、 に対して何も返されませんでしたHelpdeskOperator。クエリを見てください。

INNER JOIN HelpdeskOperator ho ON p.HelpdeskID = ho.HelpdeskID AND s.StatusID = ho.StatusID

これは、問題に割り当てられたレコードが存在せずHelpdeskOperator、ステータス ID が存在することを意味します。したがって、問題 ID が存在しないヘルプデスク オペレータを指しているか、このオペレータのステータス ID が問題ステータス ID と異なっているかのいずれかです。

次はSkill Group

INNER JOIN [Skill Group] sg ON p.SkillGroupID = sg.SkillGroupID

ここでも問題は、既存のスキル グループがないことを示しています

それからTechnican

INNER JOIN Technician t ON p.ProblemID = t.ProblemID AND s.StatusID = t.StatusID AND pr.PriorityID = t.PriorityID
                        AND sg.SkillGroupID = t.SkillGroupID

ここでは、より多くのチェックとしてより多くの作業が行われます。特定のステータスと優先度でテクニカが問題に割り当てられ、スキル グループに属している必要がありますが、スキル グループは null ですか? 問題を解決する技術者がいるかどうかを確認するには、削除AND sg.SkillGroupID = t.SkillGroupIDしてください。

INNER JOIN Technician t ON p.ProblemID = t.ProblemID AND s.StatusID = t.StatusID AND pr.PriorityID = t.PriorityID 

技術者がいるかどうか見てみましょう

これがあなたを正しい方向に導くことを願っています。すべての結合テーブルに一致するレコードがあることを確認する必要があります。

于 2013-06-13T10:31:47.863 に答える