0

在带有 ASP.NET 4 的 Visual Studio 2010 中,我试图将几个表连接在一起,以将结果放在带有 sqldatasource 的网格视图和详细信息视图中。在 sqldatasource 向导中,我选择指定自定义 SQL 语句或存储过程,然后在 Query Builder 中定义复杂查询(例如 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分配给我们的问题 AND statusid 的此类记录,因此问题 id 指向不存在的帮助台操作员或此操作员的 statusid 与问题状态 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

这是更多的工作,因为更多的检查,技术必须分配给我们的问题,给定的状态和优先级并且在技能组中,但是我们的技能组是空的?所以要检查我们的问题是否有技术人员删除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 回答