【问题标题】:incorrect syntax near the keyword 'AS'关键字“AS”附近的语法不正确
【发布时间】:2009-11-10 07:46:29
【问题描述】:

为什么我会收到这样的语法错误:关键字“AS”附近的语法不正确

我正在使用 microsoft visual studio 2005 和 sql server 2005

string strSql =
 "SELECT a.MCode, a.NameOfModule, a.Mod_Abbreviation, dt.ModuleCode,
  dt.Course, dt.Stage, dt.ModuleGrpFrom, dt.ModuleGrpTo, dt.GrpName,
  dt.GrpType, dt.StaffID, dt.AcadYear, dt.AcadSemester,
  dt.TotalHour, dt.WeeklyLectHr, dt.WeeklyPractHr, dt.WeeklyTutHr,
  dt.ModuleLeader, 0 AS TotalTeach, '' AS ModuleGroups, '' AS ML, 0 AS L, 0 AS P, 0 AS T, 1 AS NofGrp, '' AS TotalTeachUnit" +
 "FROM (SELECT * FROM
  (SELECT a.ModuleCode, a.Course, a.Stage, a.ModuleGrpFrom,
    a.ModuleGrpTo, a.GrpName, a.GrpType, a.StaffID, b.AcadYear,
    b.AcadSemester, b.TotalHour, b.WeeklyLectHr, b.WeeklyPractHr,
    b.WeeklyTutHr, b.ModuleLeader
   FROM ModuleStrGrp a 
   LEFT JOIN ModuleStr b ON a.AcadYear = b.AcadYear
    AND a.AcadSemester = b.AcadSemester
    AND a.Course = b.Course
    AND a.ModuleCode = b.ModuleCode) AS MSG 
   INNER JOIN Parameter Para ON MSG.Course = Para.Paracode2) AS dt 
  LEFT JOIN Module a ON dt.ModuleCode = a.MCode" +
 "WHERE dt.AcadYear LIKE AcadYear AND dt.AcadSemester LIKE AcadSemester 
   AND dt.Course LIKE Course AND dt.Stage LIKE Stage AND dt.StaffID LIKE Staff
   AND dt.SpecGrp LIKE Specialisation" +
 "ORDER BY dt.ModuleCode, dt.GrpType";

【问题讨论】:

  • 您能说得更具体一点吗?您是否尝试过测试每项作业,还是我们必须为您测试?

标签: sql-server-2005 visual-studio-2005 syntax


【解决方案1】:

缺少空格。
您的代码正在创建字符串

"... , '' AS TotalTeachUnitFROM (SELECT * ..."

其他行也是如此,它们之间需要空格。

【讨论】:

    【解决方案2】:

    我不会回答你的问题,但我会给你一个策略:

    将 strSql 字符串的内容复制到剪贴板,然后复制到 SQL Management Studio 中的查询,并在那里运行。

    然后它实际上会告诉您是哪个“AS”导致了问题。很可能是缺少空格、撇号或逗号。

    【讨论】:

      【解决方案3】:

      "FROM ... 设为" FROM ...

      现在是... AS TotalTeachUnitFROM ...

      【讨论】:

        【解决方案4】:

        你缺少空格。

        "...a ON dt.ModuleCode = a.MCode" +
        "FROM (SELECT * FROM ..."
        

        结果

        "...a ON dt.ModuleCode = a.MCodeFROM (SELECT * FROM ..."
                                        ^
                                    space missing
        

        【讨论】:

          【解决方案5】:

          使用@而不是+

          string strSql = @"SELECT a.MCode, a.NameOfModule, a.Mod_Abbreviation, dt.ModuleCode, dt.Course, dt.Stage, dt.ModuleGrpFrom, dt.ModuleGrpTo, dt.GrpName, dt.GrpType, dt.StaffID, dt.AcadYear, dt.AcadSemester, dt.TotalHour, dt.WeeklyLectHr, dt.WeeklyPractHr, dt.WeeklyTutHr, dt.ModuleLeader, 0 AS TotalTeach, '' AS ModuleGroups, '' AS ML, 0 AS L, 0 AS P, 0 AS T, 1 AS NofGrp, '' AS TotalTeachUnit
          FROM (SELECT * FROM (SELECT a.ModuleCode, a.Course, a.Stage, a.ModuleGrpFrom, a.ModuleGrpTo, a.GrpName, a.GrpType, a.StaffID, b.AcadYear, b.AcadSemester, b.TotalHour, b.WeeklyLectHr, b.WeeklyPractHr, b.WeeklyTutHr, b.ModuleLeader FROM ModuleStrGrp a LEFT JOIN ModuleStr b ON a.AcadYear = b.AcadYear AND a.AcadSemester = b.AcadSemester AND a.Course = b.Course AND a.ModuleCode = b.ModuleCode) AS MSG INNER JOIN Parameter Para ON MSG.Course = Para.Paracode2) AS dt LEFT JOIN Module a ON dt.ModuleCode = a.MCode
          WHERE dt.AcadYear LIKE AcadYear AND dt.AcadSemester LIKE AcadSemester AND dt.Course LIKE Course AND dt.Stage LIKE Stage AND dt.StaffID LIKE Staff AND dt.SpecGrp LIKE Specialisation
          ORDER BY dt.ModuleCode, dt.GrpType";
          

          【讨论】:

            猜你喜欢
            • 2016-06-08
            • 2021-11-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-24
            • 1970-01-01
            • 2013-12-16
            相关资源
            最近更新 更多