SQL-外部应用在SQL Server 2000中不起作用?
我以前在我的公司测试服务器中测试过创建新的视图设计SQL-外部应用在SQL Server 2000中不起作用?,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,我以前在我的公司测试服务器中测试过创建新的视图设计 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],
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个不正确的语法错误
一个靠近外部应用
,另一个靠近按ActStartDate排序
。当我问到这个问题时,我的前辈们认为这可能是因为我用来测试的测试服务器是SQL server 2008,而实时服务器是SQL server 2000
现在的问题是,真的是这样吗?如果是,是否有解决办法?请注意,我没有办法或权限升级我的live server。对于内部查询中的order by use,请在查询中使用top 100%
GO
select col1, col2 from
( select top 100 percent col1, col2,
... from yourtable) as DC
GO
出现错误是因为SQL Server允许将运算符从SQL Server 2005应用到更高版本。要使用APPLY,数据库兼容性级别必须至少为90,从2005年到更高版本都可用。您必须使用子查询替换
外部应用
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
尝试使用
select
subquery来代替OUTER APPLY
APPLY受SQL Server 2005+支持,您必须使用子查询或临时表之类的替代方法。可能的重复本身并不重复。但更多的是这个问题的后续行动。我不认为在那里提问是正确的,因为它与那个问题无关。你忘了在查询的后面添加这个在a.courseid=b.courseid和a[employee no]=b.empno上,否则我会得到错误的语法。除此之外,它工作得很好。谢谢