【发布时间】:2019-06-16 22:38:28
【问题描述】:
我正在尝试将此访问函数转换为等效的 SQL。
Last([Delivery Table].[Advice Number]) AS [LastOfAdvice Number]
由于 SQL 中不存在最后一个函数,所以我这样做了:
(SELECT TOP 1 [Delivery Table].[Advice Number] FROM
(
SELECT [Delivery Table].[Advice Number]
FROM [Delivery Table] ORDER BY [Delivery Table].[Advice Number] DESC
) AS [Advice Number Sorted]
) AS [LastOfAdvice Number]
上述解决方案来自:convert ms-access last() function to sql server 2008
但是,我收到以下错误消息:
Msg 1033, Level 15, State 1, Line 137
The ORDER BY clause is invalid in views, inline functions, derived tables,
subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is
also specified.
这很令人困惑,因为我已经在上面指定了 TOP。 有什么想法吗?
【问题讨论】:
-
子查询中没有 TOP。这就是它所抱怨的。另外顺便说一句,您是否真的从 Access 中的 Last() 函数中获得了所需的结果。这是一个糟糕的功能,并没有像大多数人认为的那样做,应该删除恕我直言。
-
不幸的是,在这种情况下,我是否得到正确的结果是无关紧要的。我已经参与了一个大规模的迁移项目,并且需要像迁移一样迁移到 SQL Server,因为如果我遗漏了任何东西,许多事情都会停止工作。不幸的是,这涉及到不得不使用可怕的 Last() 函数。
-
没问题。谢天谢地,我认为 SQL Server 不够愚蠢,无法直接替换 Last()。建议的 Max() 将为您提供可重复的可靠结果。
-
你在做什么,即使它有效,也只是给
Max(),而不是Last()。不妨按照 Gustav 的建议使用Max()。
标签: sql-server tsql ms-access database-migration