SQL - Внешнее приложение не работает в SQL Server 2000? - PullRequest
0 голосов
/ 19 февраля 2019

Я ранее тестировал на тестовом сервере своей компании, чтобы создать новый дизайн представления

SELECT     
    a.[CourseID], a.[Course Code], a.[Course Title] AS [Course Description], 
    a.[Result], a.[Employee No], a.[Employee Name], a.[Section], 
    CONVERT(VARCHAR, b.ActStartDate, 105) AS [Last Training Date], 
    CONVERT(VARCHAR, b.ValidTo, 105) AS [Validity Period], 
    a.[Status], a.[Flag]
FROM
    (SELECT     
         c.CourseID, c.CourseCode AS [Course Code], c.CourseTitle AS [Course Title], 
         c.CourseCode + ' - ' + c.CourseTitle AS Result, 
         b.EMPLOYEE_NO AS [Employee No], b.EMPLOYEE_NAME AS [Employee Name], 
         b.SECTION_CODE + ' - ' + b.SECTION_DESCRIPTION AS Section, 
         b.EMPLOYEE_STATUS AS Status, a.Flag
     FROM         
         dbo.ZOJT_EMP_COURSE AS a 
     INNER JOIN
         dbo.vEMPLOYEE_PROFILE AS b ON a.Employee_No = b.EMPLOYEE_NO 
     INNER JOIN
         dbo.tTMS_Course AS c ON c.CourseCode = a.CourseCode) A 
OUTER APPLY
    (SELECT TOP 1 *
     FROM
         (SELECT     
              b.CourseID, a.EmpNo, b.ActStartDate, a.ValidTo
          FROM         
              dbo.tTMS_Training_Record AS a 
          INNER JOIN
              (SELECT     
                   SchID, CourseID, MAX(ActStartDate) AS ActStartDate
               FROM          
                   dbo.tTMS_Training_Schedule AS z
               GROUP BY 
                   SchID, CourseID) AS b ON a.SchID = b.SchID) AS y
    WHERE 
        ActStartDate IS NOT NULL 
        AND CourseID = A.CourseID 
        AND EmpNo = A.[Employee No]
    ORDER BY 
        ActStartDate DESC, ValidTo DESC) B

Однако, когда я пытаюсь переместить этот запрос в моей рабочей среде, я получаю 2 неправильных синтаксических ошибки.

Один около Outer Apply, а другой около Order By ActStartDate.Когда я спросил об этой проблеме, мои старшие думали, что это, вероятно, связано с тем, что тестовым сервером, который я использовал для тестирования этого, был SQL Server 2008, в то время как действующим сервером является SQL Server 2000.

Вопрос теперь в том,это действительно так?Если да, есть ли обходной путь?Обратите внимание, что у меня нет возможности или полномочий для обновления моего живого сервера.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Вы получили ошибку, потому что SQL Server разрешает оператор APPLY из SQL Server 2005 до более поздней версии.Чтобы использовать APPLY, уровень совместимости базы данных должен быть не менее 90, который доступен с 2005 года и позже.Вы должны заменить outer apply, используя подзапрос

    SELECT 

        a.[CourseID], a.[Course Code], a.[Course Title] AS [Course Description], a.[Result], a.[Employee No], a.[Employee Name], a.[Section], CONVERT(varchar, b.ActStartDate, 
                      105) AS [Last Training Date], CONVERT(varchar, b.ValidTo, 105) AS [Validity Period], a.[Status], a.[Flag]
    FROM         (SELECT     c.CourseID, c.CourseCode AS [Course Code], c.CourseTitle AS [Course Title], c.CourseCode + ' - ' + c.CourseTitle AS Result, b.EMPLOYEE_NO AS [Employee No], 
                      b.EMPLOYEE_NAME AS [Employee Name], b.SECTION_CODE + ' - ' + b.SECTION_DESCRIPTION AS Section, b.EMPLOYEE_STATUS AS Status, a.Flag
    FROM         dbo.ZOJT_EMP_COURSE AS a INNER JOIN
                      dbo.vEMPLOYEE_PROFILE AS b ON a.Employee_No = b.EMPLOYEE_NO INNER JOIN
                      dbo.tTMS_Course AS c ON c.CourseCode = a.CourseCode) 
    A left join
                          (SELECT  max(ActStartDate) as ActStartDate,
  max(ValidTo) as ValidTo,CourseID,EmpNo
                            FROM          (SELECT     b.CourseID, a.EmpNo, b.ActStartDate, a.ValidTo
                                            FROM         dbo.tTMS_Training_Record AS a INNER JOIN
                                            (SELECT     SchID, CourseID, MAX(ActStartDate) AS ActStartDate
                                            FROM          dbo.tTMS_Training_Schedule AS z
                                            GROUP BY SchID, CourseID) AS b ON a.SchID = b.SchID) as y

                            WHERE ActStartDate IS NOT NULL 
                           --AND CourseID = A.CourseID AND EmpNo = A.[Employee No]
                            --ORDER BY ActStartDate DESC, ValidTo DESC
                         group by CourseID,EmpNo
                         ) B 
                         on a.courseid = b.courseid and a.[employee no] = b.empno
0 голосов
/ 19 февраля 2019

Для заказа по внутреннему запросу используйте верхние 100 процентов с запросом.

  GO
  select col1, col2 from 
  ( select top 100 percent col1, col2,
  ... from yourtable) as DC
  GO
...